tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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:
M.cargo/config.toml.in | 5+++++
MCargo.lock | 3+--
MCargo.toml | 4++++
Msupply-chain/audits.toml | 6++++++
Msupply-chain/config.toml | 4++++
Mthird_party/rust/hashlink/.cargo-checksum.json | 4++--
Athird_party/rust/hashlink/.circleci/config.yml | 55+++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mthird_party/rust/hashlink/Cargo.toml | 50+++++++++++++++++++++++++++++++++++++-------------
Mthird_party/rust/hashlink/src/lib.rs | 2+-
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 {