Repository navigation
Patch async-imap to the upstream commit that drops pin-utils (RUSTSEC-2026-0441) - #172
1 commit merged into
Conversation
cargo-deny fails on RUSTSEC-2026-0441: pin-utils is unmaintained, and it reaches the build only through async-imap 0.12.0 (the email feature). That advisory turns both supply-chain and storage-boundary red on main. Upstream replaced pin-utils with pin-project in async-email/async-imap d1f2606421, the only commit after the 0.12.0 release, so the patched crate is 0.12.0 with that one change and an unchanged API. Point async-imap at that commit through [patch.crates-io], and allow that one git source in deny.toml. The lockfile change is limited to async-imap's source and the removal of pin-utils. Drop the patch and the allow-git entry once a release after 0.12.0 is published.
Tiny Sweeper reviewReviewed head: Verdict: Ready for maintainer review · Priority: none Diagnostics and supporting detailsFull summaryPull request purpose (title): Patch async-imap to the upstream commit that drops pin-utils (RUSTSEC-2026-0441). This pull request patches `async-imap` to the upstream commit that drops the unmaintained `pin-utils` dependency, addressing RUSTSEC-2026-0441, which is failing `cargo deny check` on `main`. The patch is declared in `[patch.crates-io]` and the corresponding git source is added to `deny.toml`'s `allow-git` list, required because `unknown-git = "deny"`. The second advisory, RUSTSEC-2026-0459 (bundled SQLite in `libsqlite3-sys`), is explicitly left unfixed and cargo-deny remains red on it. The latest-push-delta section is unavailable. Unreviewed paths
Review snapshot
Completeness: Complete What changed`Cargo.toml` gains a `[patch.crates-io]` entry pointing `async-imap` at git rev `d1f2606421c9211f992c1c565a32d8f770476aeb`, with a comment explaining the pin-utils removal and when to drop the patch. `deny.toml` adds `https://github.com/async-email/async-imap` to `allow-git` and extends the explanatory comment. `Cargo.lock` re-resolves `async-imap` to the git source and removes the `pin-utils` package and its dependency line, with nothing else re-resolved. No Rust source changes. Features
TestsNo supported feature-to-test mapping was produced. Test execution is not inferred. FindingsNo active actionable findings. Before mergeNone. Agent review detailscritique
security
tests
commits
description
Evidence and run details
|
4043ba4
Summary
mainis red onmodule-ci / supply-chainandstorage-boundary. Both jobs fail incargo deny check, the last step of thestorage-boundaryjob.The "failed closed: cargo tree for tinychannels did not contain its root package" line in that job is not the failure. It's the
--self-testnegative control ofscripts/check-storage-engine-trees.sh, which then prints "self-test passed" and "dependency boundary passed for all native library packages".cargo-deny reports two advisories. This PR fixes the first one:
pin-utilsis unmaintained. It comes in only throughasync-imap0.12.0 (theemailfeature).pin-projectin chatmail/async-imap@d1f2606, the only commit after the 0.12.0 release (31fde98fce). So the patched crate is 0.12.0 with that single change, and its API is unchanged.async-imapat that commit through[patch.crates-io], and adds that one git source todeny.toml'sallow-git, which is needed becauseunknown-git = "deny". No advisory is ignored.allow-gitentry, once a release after 0.12.0 is published.libsqlite3-sys0.38.2. NOT fixed here.rusqlite0.40.2, both directly (imessage) and viatinystoragedrivers-connect/-document.libsqlite3-sysislinks = "sqlite3", so tinychannels can't move torusqlite0.41 on its own; tinystoragedrivers has to move first.rusqliteonce that lands. cargo-deny stays red on this one advisory until then.Lockfile change (+1/-9):
async-imap's source becomes the git rev, and thepin-utilspackage and its dependency line are removed. Nothing else is re-resolved.API Or Behavior Changes
None.
async-imapstays at 0.12.0, with only its internal pin projection changed upstream.Tests
Run on a Linux CI host on the exact tree of this commit (tree
54eed3d7f8), checked out from officialmaina626f12 plus this change:storage-boundaryjob's guards, verbatim from ci.yml:check-webpki-roots.py --self-testand the real check,check-storage-engine-trees.sh --self-testand the real check. All pass.cargo deny --locked check all: RUSTSEC-2026-0441 no longer reported. The only remaining error is RUSTSEC-2026-0459 (see above).cargo deny --locked check sources: pass.cargo clippy --locked --all-targets --all-features -- -D warnings: pass.cargo build --locked --all-targets --all-features: pass.cargo test --locked --all-features: 2323 passed. The 4tinychannels-clienttests fail identically onmainwithout a staged fixture ("TINYCHANNELS_CLIENT_TEST_ARCHIVE_NAME must identify the staged local fixture"); CI stages it.cargo check --locked -p tinychannels --no-default-features --features email: pass.cargo fmt --check: not run. No Rust source changes (Cargo.toml, deny.toml and Cargo.lock only).scripts/test-features.sh: not run locally; covered bymodule-cion this PR.Documentation
Not needed. The patch and the
allow-gitentry each carry a comment explaining why they exist and when to remove them.Summary by CodeRabbit