commit b781ce704ed8ce70634811d369cbad10ba3477dd
parent 4e386236cecc6986bf3c6cdb1290adf5af3b7b13
Author: Erich Gubler <erichdongubler@gmail.com>
Date: Thu, 2 Oct 2025 18:09:18 +0000
Bug 1991226 - chore(rust): use `hashlink` fork that accepts `hashbrown` 0.16 r=supply-chain-reviewers
Differential Revision: https://phabricator.services.mozilla.com/D266856
Diffstat:
9 files changed, 115 insertions(+), 18 deletions(-)
diff --git a/.cargo/config.toml.in b/.cargo/config.toml.in
@@ -30,6 +30,11 @@ git = "https://github.com/beurdouche/nss-gk-api"
rev = "e48a946811ffd64abc78de3ee284957d8d1c0d63"
replace-with = "vendored-sources"
+[source."git+https://github.com/erichdongubler-contrib/hashlink?rev=76dc47a12af5829c1e8bf4834e38b410dec2aeff"]
+git = "https://github.com/erichdongubler-contrib/hashlink"
+rev = "76dc47a12af5829c1e8bf4834e38b410dec2aeff"
+replace-with = "vendored-sources"
+
[source."git+https://github.com/franziskuskiefer/cose-rust?rev=43c22248d136c8b38fe42ea709d08da6355cf04b"]
git = "https://github.com/franziskuskiefer/cose-rust"
rev = "43c22248d136c8b38fe42ea709d08da6355cf04b"
diff --git a/Cargo.lock b/Cargo.lock
@@ -2944,8 +2944,7 @@ dependencies = [
[[package]]
name = "hashlink"
version = "0.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1"
+source = "git+https://github.com/erichdongubler-contrib/hashlink?rev=76dc47a12af5829c1e8bf4834e38b410dec2aeff#76dc47a12af5829c1e8bf4834e38b410dec2aeff"
dependencies = [
"hashbrown 0.15.2",
]
diff --git a/Cargo.toml b/Cargo.toml
@@ -274,3 +274,7 @@ zip = { path = "third_party/rust/zip" }
# Patch libcrux-traits to avoid unnecessary unused dependencies and conflicts.
libcrux-traits = { path = "build/rust/libcrux-traits" }
+
+# Patch `hashlink` 0.10.0 to include a `hashbrown` range dependency of 0.15 <= ver <= 0.16: <https://github.com/erichdongubler-contrib/hashlink/pull/6>
+# This technically breaks `hashbrown::DefaultHashBuilder: Copy`, but it's not something we use.
+hashlink = { git = "https://github.com/erichdongubler-contrib/hashlink", rev = "76dc47a12af5829c1e8bf4834e38b410dec2aeff" }
diff --git a/supply-chain/audits.toml b/supply-chain/audits.toml
@@ -3024,6 +3024,12 @@ who = "Erich Gubler <erichdongubler@gmail.com>"
criteria = "safe-to-deploy"
delta = "0.9.1 -> 0.10.0"
+[[audits.hashlink]]
+who = "Erich Gubler <erichdongubler@gmail.com>"
+criteria = "safe-to-deploy"
+delta = "0.10.0 -> 0.10.0@git:76dc47a12af5829c1e8bf4834e38b410dec2aeff"
+importable = false
+
[[audits.headers]]
who = "Mike Hommey <mh+mozilla@glandium.org>"
criteria = "safe-to-run"
diff --git a/supply-chain/config.toml b/supply-chain/config.toml
@@ -76,6 +76,10 @@ notes = "The dependencies on tokio-reactor and tokio-threadpools are just a hack
criteria = "safe-to-run"
notes = "Used for fuzzing."
+[policy.hashlink]
+audit-as-crates-io = true
+notes = "Only a single change on top of 0.10.0 to allow `hashbrown` 0.16 as a dependency."
+
[policy.http3server]
criteria = "safe-to-run"
notes = "Used for testing."
diff --git a/third_party/rust/hashlink/.cargo-checksum.json b/third_party/rust/hashlink/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"CHANGELOG.md":"a3b85f4904f679858753e00bb5bdd7604bfe7aff22dd06608026dd02502bd11d","Cargo.toml":"09cbc624668ba4270d1f89f00eb5201cefaf968e20b37b113bacda64a08910ca","LICENSE-APACHE":"c144680885b29e4719e2a51f0aab5439a1e02d980692b5aaf086cae12727f28b","LICENSE-MIT":"e915669a595b11a200873df8286561881b0e04932f6412a585db6297ba0bc97c","README.md":"f2b040b9aa899d3bd9fbb6c2391054980b00e7f475b6066071c17dd59d614d1c","src/lib.rs":"97f929c97a553e03e214528b9e2bc84e6df8fe70c5a786d11f5fd9c28f06b05f","src/linked_hash_map.rs":"74f08146f554f24c1f70305422ce91d49a2be109aa016c92428933ab40cd2aea","src/linked_hash_set.rs":"5a39efbc0cd4d5be4a743fe71d2b2593892fcab3c12e3b2dba61b831f3a92eba","src/lru_cache.rs":"a0d92f10f903580c546e25aeb1000cf33d7d242070dd52f83165b75dd25efdd0","src/serde.rs":"5b216ccd4b21f3093bb4baf18b9f3943f9ae6f49d2faad2c3b566e8a0cb99851","tests/linked_hash_map.rs":"ee226081892c3149a232ac5ac1ed2bd8f18610470686f9583fd26d6d4dd7accc","tests/linked_hash_set.rs":"35631856063dc0129f8aad241631843b39794a4c1e22d51bd4caba4208512646","tests/lru_cache.rs":"24587003f610932f669f29839503b7ffff82186a5f5d7cff1043b8fe945c2e52","tests/serde.rs":"4e0b1c19c3c542f0b9adac72f6ff32907da6bb58b4f1810dcdf9cd4e2eef34b1"},"package":"7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1"}
-\ No newline at end of file
+{"files":{".circleci/config.yml":"255266992e3186622875445cb1906c24f049206cd48ada6ec5987f450bcd54b1","CHANGELOG.md":"a3b85f4904f679858753e00bb5bdd7604bfe7aff22dd06608026dd02502bd11d","Cargo.toml":"83d92a2c28cf88750e6bb1b3c5bdcba6bab40c55c3180c0f4c1586ebbea89c3d","LICENSE-APACHE":"c144680885b29e4719e2a51f0aab5439a1e02d980692b5aaf086cae12727f28b","LICENSE-MIT":"e915669a595b11a200873df8286561881b0e04932f6412a585db6297ba0bc97c","README.md":"f2b040b9aa899d3bd9fbb6c2391054980b00e7f475b6066071c17dd59d614d1c","src/lib.rs":"a4a18633d598bd1940a868b2d93b57bedec6ffdeee3275264e69ec134789bdb9","src/linked_hash_map.rs":"74f08146f554f24c1f70305422ce91d49a2be109aa016c92428933ab40cd2aea","src/linked_hash_set.rs":"5a39efbc0cd4d5be4a743fe71d2b2593892fcab3c12e3b2dba61b831f3a92eba","src/lru_cache.rs":"a0d92f10f903580c546e25aeb1000cf33d7d242070dd52f83165b75dd25efdd0","src/serde.rs":"5b216ccd4b21f3093bb4baf18b9f3943f9ae6f49d2faad2c3b566e8a0cb99851","tests/linked_hash_map.rs":"ee226081892c3149a232ac5ac1ed2bd8f18610470686f9583fd26d6d4dd7accc","tests/linked_hash_set.rs":"35631856063dc0129f8aad241631843b39794a4c1e22d51bd4caba4208512646","tests/lru_cache.rs":"24587003f610932f669f29839503b7ffff82186a5f5d7cff1043b8fe945c2e52","tests/serde.rs":"4e0b1c19c3c542f0b9adac72f6ff32907da6bb58b4f1810dcdf9cd4e2eef34b1"},"package":null}
+\ No newline at end of file
diff --git a/third_party/rust/hashlink/.circleci/config.yml b/third_party/rust/hashlink/.circleci/config.yml
@@ -0,0 +1,55 @@
+version: 2
+
+jobs:
+ build:
+ docker:
+ - image: cimg/rust:1.65.0
+ steps:
+ - checkout
+ - run:
+ name: Setup Rust
+ command: |
+ rustup toolchain uninstall nightly
+ rustup toolchain install nightly -c miri rust-src rustfmt
+ - run:
+ name: Version information
+ command: |
+ rustc --version
+ cargo --version
+ rustc +nightly --version
+ cargo +nightly --version
+ rustup --version
+ - run:
+ name: Calculate dependencies
+ command: cargo generate-lockfile
+ - restore_cache:
+ keys:
+ - cargo-cache-{{ arch }}-{{ checksum "Cargo.lock" }}
+ - run:
+ name: Check Formatting
+ command: |
+ rustfmt --version
+ cargo fmt --all -- --check --color=auto
+ - run:
+ name: Build all targets
+ command: cargo build --all --all-targets
+ - run:
+ name: Run all tests
+ command: cargo test --all --all-features
+ - run:
+ name: Run all tests under miri
+ command: |
+ cargo +nightly miri test --all-features
+ - run:
+ name: Run all tests under sanitizers
+ command: |
+ RUSTFLAGS="-Z sanitizer=address" cargo +nightly -Z build-std test --target x86_64-unknown-linux-gnu --all-features
+ RUSTFLAGS="-Z sanitizer=leak" cargo +nightly test -Z build-std --target x86_64-unknown-linux-gnu --all-features
+ RUSTFLAGS="-Z sanitizer=memory" cargo +nightly test -Z build-std --target x86_64-unknown-linux-gnu --all-features
+ - save_cache:
+ paths:
+ - /usr/local/cargo/registry
+ - target/debug/.fingerprint
+ - target/debug/build
+ - target/debug/deps
+ key: cargo-cache-{{ arch }}-{{ checksum "Cargo.lock" }}
diff --git a/third_party/rust/hashlink/Cargo.toml b/third_party/rust/hashlink/Cargo.toml
@@ -15,6 +15,12 @@ rust-version = "1.65"
name = "hashlink"
version = "0.10.0"
authors = ["kyren <kerriganw@gmail.com>"]
+build = false
+autolib = false
+autobins = false
+autoexamples = false
+autotests = false
+autobenches = false
description = "HashMap-like containers that hold their key-value pairs in a user controllable order"
documentation = "https://docs.rs/hashlink"
readme = "README.md"
@@ -25,8 +31,35 @@ keywords = [
license = "MIT OR Apache-2.0"
repository = "https://github.com/kyren/hashlink"
+[badges.circle-ci]
+branch = "master"
+repository = "kyren/hashlink"
+
+[features]
+serde_impl = ["serde"]
+
+[lib]
+name = "hashlink"
+path = "src/lib.rs"
+
+[[test]]
+name = "linked_hash_map"
+path = "tests/linked_hash_map.rs"
+
+[[test]]
+name = "linked_hash_set"
+path = "tests/linked_hash_set.rs"
+
+[[test]]
+name = "lru_cache"
+path = "tests/lru_cache.rs"
+
+[[test]]
+name = "serde"
+path = "tests/serde.rs"
+
[dependencies.hashbrown]
-version = "0.15"
+version = ">=0.15,<=0.16"
features = [
"default-hasher",
"inline-more",
@@ -38,15 +71,6 @@ version = "1.0"
optional = true
default-features = false
-[dev-dependencies.rustc-hash]
-version = "2"
-
-[dev-dependencies.serde_test]
-version = "1.0"
-
-[features]
-serde_impl = ["serde"]
-
-[badges.circle-ci]
-branch = "master"
-repository = "kyren/hashlink"
+[dev-dependencies]
+rustc-hash = "2"
+serde_test = "1.0"
diff --git a/third_party/rust/hashlink/src/lib.rs b/third_party/rust/hashlink/src/lib.rs
@@ -16,7 +16,7 @@ pub use lru_cache::LruCache;
/// Default hash builder, matches hashbrown's default hasher.
///
/// See [`DefaultHasher`] for more details.
-#[derive(Clone, Copy, Default, Debug)]
+#[derive(Clone, Default, Debug)]
pub struct DefaultHashBuilder(hashbrown::DefaultHashBuilder);
impl BuildHasher for DefaultHashBuilder {