chore(deps): refresh lockfile off RUSTSEC advisories - #281
Merged
Conversation
Rust 1.98 fires both `unused_async` and the newer `unused_async_trait_impl` on AzureStore::from_remote_url. The `async` there is deliberate -- it keeps the signature symmetric with S3Store::from_remote_url and leaves room for a credential provider that awaits -- so the existing allow is extended rather than the signature changed. The MSRV toolchain rejects the newer lint name as unknown, hence `unknown_lints` in the same attribute. Also drops a redundant `&` from eight `format!` arguments in tests/protocol_push.rs, flagged by `useless_borrows_in_formatting`.
Clears the way for the lockfile refresh that follows. aws-sdk-s3 1.144.0 and aws-config 1.11.0 require 1.94.1, and kstring 2.0.3 (transitive, via gix-attributes) requires 1.96. Taking 1.96 keeps the lockfile on the newest release of each rather than pinning dependencies back to hold an older floor. ci.yml's derive-toolchain job reads rust-version from Cargo.toml via cargo metadata, so the new floor propagates to every job with no workflow edit. Also corrects the dependabot ignore comment, which claimed the rule blocks MSRV-raising updates. It blocks semver-major bumps only, and kstring lifted its floor in a patch release.
Cargo's resolver ignores rust-version by default, so a routine `cargo update` can pull a dependency that no longer builds on the workspace floor -- and a patch release is enough to do it: kstring 2.0.3 lifted its own floor from 1.73 to 1.96. Such a break surfaces only under CI's toolchain, never under a newer local stable. `resolver.incompatible-rust-versions = "fallback"` makes cargo prefer the newest version that still satisfies rust-version, reaching past it only when no compatible option exists.
Clears RUSTSEC-2026-0258 (h2 0.4.13, unbounded empty DATA frames) and RUSTSEC-2026-0253 (lru 0.16.4, use-after-free when a key's Drop panics inside LruCache::pop). Both live in main's lockfile and fail the cargo-deny step of CI's build-test job, which is why every open dependabot PR is red. lru cannot be bumped on its own: aws-sdk-s3 pinned lru ^0.16.3 until 1.144.0, so the fix carries aws-sdk-s3 1.137.0 -> 1.144.0 and aws-config 1.8.18 -> 1.11.0. rustls stays on a single 0.23.x line, so the deny.toml bans on rustls < 0.23 are untouched.
dekobon
force-pushed
the
chore/refresh-lockfile-off-advisories
branch
from
August 29, 2026 19:24
7dcba41 to
b9790f6
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Every open dependabot PR (#274, #275, #276, #277, #278, #280) is red, and none
of them are at fault. They all fail the same two checks —
Build & Testand theciaggregate gate — at thecargo-denystep, on two advisories that live inmain's
Cargo.lock:h2LruCache::poplrucargo-denyruns before the test and build steps, so on those six PRs the testsnever executed at all. Main is stale-green: its last CI run was 2026-08-08,
before either advisory was published.
What
lrucannot be bumped on its own.aws-sdk-s3pinnedlru ^0.16.3until1.144.0, so the fix necessarily carries
aws-sdk-s31.137.0 → 1.144.0 andaws-config1.8.18 → 1.11.0.rustlsstays on a single 0.23.x line, so thedeny.tomlbans onrustls < 0.23/rustls-webpki < 0.103are untouched.The refresh also moves
chacha20off the yanked 0.10.0, clearing the lastcargo-deny warning.
aws-sdk-s31.144.0 andaws-config1.11.0 require1.94.1, and
kstring2.0.3 (transitive, viagix-attributes) requires 1.96.Raising the floor keeps the lockfile on the newest release of each rather than
pinning dependencies back. The declared floor is truthful: the maximum
rust_versionacross the entire dependency graph iskstringat 1.96.0.resolver.incompatible-rust-versions = "fallback". Cargo's resolverignores
rust-versionby default — a plaincargo updateon a newer localstable silently selected
kstring2.0.3+, and the break was invisible until itran under CI's toolchain.
kstringlifted its own floor from 1.73 to 1.96 in apatch release, which the dependabot
semver-majorignore rule does not andcannot catch. With this set,
cargo updatenow reports "latest Rust 1.96compatible versions".
make pre-commiton a current local stable.useless_borrows_in_formatting(8× redundant
&informat!args) is fixed outright.unused_async_trait_implonAzureStore::from_remote_urlis allowed instead —the
asyncthere is deliberate and documented, and 1.96 rejects the newer lintname as unknown, so
unknown_lintsis what keeps one attribute valid on both.No workflow edit is needed:
ci.yml'sderive-toolchainjob readsrust-versionfromCargo.tomlviacargo metadata, so the new floorpropagates everywhere on its own.
Verification
Run locally against CI's exact toolchain (1.96) and CI's pinned cargo-deny
(0.18.9) — a newer local cargo-deny does not flag RUSTSEC-2026-0253 at all, and
a newer local rustc reports lints CI never sees.
make cion 1.96make pre-commiton stable 1.98cargo deny check advisories bans licenses sources@ 0.18.9cargo build --workspace --locked(msrv job)Commits are ordered so each one builds standalone — the MSRV bump precedes the
lockfile refresh, since the new lock requires 1.96. Spot-checked by building at
each intermediate commit.
After this lands
Cargo.lockand will merge normallyafter a rebase.
close them itself once rebased.