Skip to content

fix(deps): bump zip to 9 for RUSTSEC-2026-0367/0368/0369 - #2471

Merged
i386 merged 1 commit into
Mesh-LLM:mainfrom
wpfleger96:duncan/bump-zip-9
Oct 17, 2026
Merged

i386 merged 1 commit into
Mesh-LLM:mainfrom
wpfleger96:duncan/bump-zip-9

Conversation

@wpfleger96

@wpfleger96 wpfleger96 commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

🤖 Bumps zip from 8.6 to 9 in mesh-llm-plugin-manager and mesh-llm-system (lockfile: 8.6.0 → 9.0.5) to clear three advisories against zip 8.6.0: RUSTSEC-2026-0367, RUSTSEC-2026-0368 and RUSTSEC-2026-0369. After this change cargo tree -i zip --workspace --target all shows only zip 9.0.5.

The only API change that affects us: ZipFile::name() now returns ZipResult<Cow<str>>. The unsafe-path error in the plugin archive extractor now formats String::from_utf8_lossy(file.name_raw()), so it still reports the entry name even when that name isn't valid UTF-8.

Not included: keyring 4.2 → secret-service 5.2 → zbus 5.19 also triggers the unmaintained notices RUSTSEC-2026-0370/0371/0372 (zvariant, zbus_names, zvariant_derive). keyring 4.2.0 and secret-service 5.2.0 are the latest releases, and secret-service still requires zbus ^5, so those notices can't be cleared until upstream moves to zbus 6.

Summary by CodeRabbit

  • Bug Fixes
    • Unsafe ZIP archive entries now show the rejected path using a loss-tolerant representation, so the error message can display paths that contain invalid UTF-8 bytes. This makes it easier to identify which archive entry was rejected.

zip 8.6.0 is affected by RUSTSEC-2026-0367, -0368 and -0369. zip 9 also makes ZipFile::name() fallible, so the unsafe-path error now reports the raw entry name lossily.

Co-authored-by: Will Pfleger <[email protected]>
Signed-off-by: Will Pfleger <[email protected]>
@coderabbitai

coderabbitai Bot commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 6561b39f-4f22-4c2e-9045-831cc62523f9
📥 Commits

Reviewing files that changed from the base of the PR and between bd59a16 and 603c091.

⛔ Files ignored due to path filters: 1
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing: 3
  • mesh/crates/mesh-llm-plugin-manager/Cargo.toml
  • mesh/crates/mesh-llm-plugin-manager/src/archive.rs
  • mesh/crates/mesh-llm-system/Cargo.toml

Included review availability: This review used your included allowance. Your plan provides up to 8 included reviews per hour; 7 remain after this review.

📝 Walkthrough

The ZIP dependency changes from version 8.6 to 9 in two crates. Unsafe ZIP entry errors now format paths from raw filename bytes using lossy UTF-8 decoding.

Changes: ZIP handling

Layer / File(s) Summary
Update ZIP dependencies
mesh/crates/mesh-llm-plugin-manager/Cargo.toml, mesh/crates/mesh-llm-system/Cargo.toml
Both crates use ZIP version 9. Their disabled default features and deflate feature settings remain unchanged.
Format unsafe-entry paths
mesh/crates/mesh-llm-plugin-manager/src/archive.rs
Unsafe ZIP entry errors use the entry’s raw filename bytes with lossy UTF-8 decoding instead of the ZIP library’s decoded filename.

Priority: ➖ Normal

Estimated code review effort: 2 (Simple) | ~5 minutes

Change: Other

Merge Risk: ⚪ Minimal · up to 603c0

No merge-blocking issue is established for the ZIP update or changed error text. Merge after the normal Rust checks.

Pre-merge checks: Passed 4 · Failed 1

Failed Failed checks: 1 warning

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 1 functions across 1 files. (2 skipped: 2 … Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed Passed checks: 4 passed
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title clearly identifies the dependency update and its purpose of addressing the three listed RustSec advisories.
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 1 functions across 1 files. (2 skipped: 2 unsupported.)

Resolution

Write docstrings for the functions missing them to satisfy the coverage threshold.

  • Fix all pre-merge checks with AI
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@i386 i386 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving at head 603c0914c.

Verified:

  • Single lock resolution of zip 8.6.0 → 9.0.5 (one package block; adds nix 0.31.3 for the unix permission path), version floors bumped in mesh-llm-plugin-manager and mesh-llm-system — the only two in-tree users of the zip crate. tools/xtask's archive writer is a hand-rolled flate2 implementation and is unaffected.
  • The only source change is the error-message compensation file.name() → String::from_utf8_lossy(file.name_raw()) — display-only. The enclosed_name() zip-slip guard on extraction is untouched, and there are no by_name call sites that could be affected by name-encoding changes in v9.
  • Reproduced at the head object (isolated worktree): mesh-llm-plugin-manager 57 passed / 0 failed; mesh-llm-system 237 passed / 0 failed; clippy and rustfmt clean on both.

For the record: the three advisory IDs (RUSTSEC-2026-0367/0368/0369) are taken as stated — no offline advisory fetch from this machine — but the remediation is exactly the floor bump and it resolves tree-wide in the lock.

@i386
i386 enabled auto-merge (squash) October 17, 2026 20:00
@i386

i386 commented Oct 17, 2026

Copy link
Copy Markdown
Collaborator

@wpfleger96 thank you!

@i386
i386 merged commit 450b084 into Mesh-LLM:main Oct 17, 2026
62 of 64 checks passed
baxen pushed a commit to block/buzz that referenced this pull request Oct 18, 2026
🤖 Excludes the test-only `buzz-mesh-smoke` crate from the `cargo-deny`
graph via `[graph] exclude` in `deny.toml`.

`buzz-mesh-smoke` holds hardware smoke-test examples; nothing from it
ships. It is the only root-workspace crate that depends on `mesh-llm`,
which brings in `zip` 8.6 (RUSTSEC-2026-0367/-0368/-0369), the `zbus` 5
unmaintained notices (RUSTSEC-2026-0370/-0371/-0372), and `negentropy`
via `mesh-llm-client` → `nostr-sdk` (RUSTSEC-2026-0365). None has a
usable upstream fix for the pinned `mesh-llm` v0.76.2. The `zip` bump
has merged upstream in
[mesh-llm#2471](Mesh-LLM/mesh-llm#2471), but no
`mesh-llm` release contains it yet (latest is v0.78.1).

CI's Security job runs `cargo-deny check` from the repo root, which
reads this `deny.toml`, so the exclusion applies there. These advisories
remain fatal for any shipped crate that pulls in the same dependencies.
No existing advisory ignores were changed.

Signed-off-by: Will Pfleger <[email protected]>
Co-authored-by: Hayt <211b96e6a2b7f45fd4047988976c7bbbeeda0c15f3ae7b32eec20834b5a55118@buzz.block.builderlab.xyz>
baxen pushed a commit to block/buzz that referenced this pull request Oct 18, 2026
🤖 Bumps the desktop app's direct `zip` dependency from 8 to 9 to clear
RUSTSEC-2026-0367, RUSTSEC-2026-0368 and RUSTSEC-2026-0369 on the
managed Node.js archive extraction path.

zip 9 makes `ZipArchive::name_for_index` and `ZipFile::name` fallible.
Managed Node.js zip validation now rejects an entry whose name can't be
decoded, and the "unsafe path" error prints the raw entry name lossily.
The absolute-path, drive-prefix, traversal and `enclosed_name()` checks
are unchanged.

The lockfile update is scoped to `zip`; it pulls in newer `zstd`,
`lzma-rust2` and `ppmd-rust` that zip 9 requires.

**`zip` 8 is still in release builds.** With `--features mesh-llm`,
`mesh-llm` v0.76.2 (`mesh-llm-system`, `mesh-llm-plugin-manager`,
`mesh-llm-host-runtime`) still depends on `zip` 8.6.0. That goes away
when the `mesh-llm` pin moves to a release that includes
Mesh-LLM/mesh-llm#2471.

Signed-off-by: Will Pfleger <[email protected]>
Co-authored-by: Duncan <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@buzz.block.builderlab.xyz>
wpfleger96 added a commit to block/buzz that referenced this pull request Oct 18, 2026
🤖 Removes the whole-crate `[graph] exclude = ["buzz-mesh-smoke"]` from
`deny.toml`, so the root `cargo-deny` check covers `buzz-mesh-smoke` and
its `mesh-llm` dependency again. The advisories that crate brings in are
ignored one ID at a time instead, each naming its dependency path and
when to remove it:

- `RUSTSEC-2026-0367` / `0368` / `0369` — `zip` 8.6.0 extraction bugs
via `buzz-mesh-smoke` → `mesh-llm` v0.76.2. `mesh-llm` copies entries
manually and never calls `ZipArchive::extract`. Remove on the `mesh-llm`
release that ships Mesh-LLM/mesh-llm#2471.
- `RUSTSEC-2026-0370` / `0371` / `0372` — unmaintained (not vulnerable)
`zvariant`, `zbus_names`, `zvariant_derive` via `mesh-llm` → `keyring` 4
→ `secret-service` 5 → `zbus` 5. Remove when that stack leaves `zbus` 5.

Any new advisory under `mesh-llm` now fails CI instead of being silently
excluded. No workflow or lockfile changes; the old beta desktop crate in
`desktop/` is not checked.

Signed-off-by: Will Pfleger <[email protected]>
Co-authored-by: Hayt <211b96e6a2b7f45fd4047988976c7bbbeeda0c15f3ae7b32eec20834b5a55118@buzz.block.builderlab.xyz>
@ndizazzo ndizazzo added this to the 0.79.0 milestone Nov 1, 2026
loganj pushed a commit to block/buzz that referenced this pull request Nov 2, 2026
…endency policy (#8922)

Two RustSec advisories published after Oct 30 turned the `Security /
Dependency policy` (`cargo-deny check`) job red on every PR. This clears
both.

## Changes

- **`pulldown-cmark` 0.13.5 → 0.13.6**
([RUSTSEC-2026-0433](https://rustsec.org/advisories/RUSTSEC-2026-0433)).
Lockfile only — `crates/buzz-relay/Cargo.toml` already allows `0.13.4`+.
Not exploitable here regardless: the advisory needs
`Options::ENABLE_WIKILINKS`, and our only caller
(`crates/buzz-relay/src/api/invites.rs`) uses the default `Parser::new`.
- **Ignore
[RUSTSEC-2026-0429](https://rustsec.org/advisories/RUSTSEC-2026-0429)**
for `zip` 8.6.0 in `deny.toml`, next to the existing
RUSTSEC-2026-0367/0368/0369 entries for the same path. The only path is
the dev-only `buzz-mesh-smoke` crate → mesh-llm v0.76.2 → zip 8. The
advisory is in `ZipArchive::extract`. Both mesh-llm zip readers at
v0.76.2 (`mesh-llm-plugin-manager/src/archive.rs`,
`mesh-llm-system/src/autoupdate/release_fetch.rs`) iterate `by_index`
and `io::copy` each entry by hand and never call `extract`. We can't
bump past it yet:
[Mesh-LLM/mesh-llm#2471](Mesh-LLM/mesh-llm#2471)
moved mesh-llm to zip 9, but the latest release (v0.78.1) still locks
zip 8.6.0. The existing comment already says to remove these ignores on
the mesh-llm bump that ships it.

## Testing

On a Linux workstation at the PR head: `cargo-deny check` passes, `cargo
check --locked -p buzz-relay` builds, and the `buzz-relay` invite tests
(the `pulldown-cmark` caller) pass.

## Simpler?

No new concepts: one lockfile bump and one ignore entry that joins an
existing, already-documented group with the same removal trigger.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Signed-off-by: Luke Tornquist <[email protected]>
Co-authored-by: Elrond <28d6302a099e5225b02c4155ac4236e4912603df2ab08dbfc2f4fef08ce598c8@buzz.block.builderlab.xyz>
Co-authored-by: Claude Opus 5.5 <[email protected]>
SanHsien pushed a commit to SanHsien/buzz that referenced this pull request Nov 7, 2026
…endency policy (block#8922)

Two RustSec advisories published after Oct 30 turned the `Security /
Dependency policy` (`cargo-deny check`) job red on every PR. This clears
both.

## Changes

- **`pulldown-cmark` 0.13.5 → 0.13.6**
([RUSTSEC-2026-0433](https://rustsec.org/advisories/RUSTSEC-2026-0433)).
Lockfile only — `crates/buzz-relay/Cargo.toml` already allows `0.13.4`+.
Not exploitable here regardless: the advisory needs
`Options::ENABLE_WIKILINKS`, and our only caller
(`crates/buzz-relay/src/api/invites.rs`) uses the default `Parser::new`.
- **Ignore
[RUSTSEC-2026-0429](https://rustsec.org/advisories/RUSTSEC-2026-0429)**
for `zip` 8.6.0 in `deny.toml`, next to the existing
RUSTSEC-2026-0367/0368/0369 entries for the same path. The only path is
the dev-only `buzz-mesh-smoke` crate → mesh-llm v0.76.2 → zip 8. The
advisory is in `ZipArchive::extract`. Both mesh-llm zip readers at
v0.76.2 (`mesh-llm-plugin-manager/src/archive.rs`,
`mesh-llm-system/src/autoupdate/release_fetch.rs`) iterate `by_index`
and `io::copy` each entry by hand and never call `extract`. We can't
bump past it yet:
[Mesh-LLM/mesh-llm#2471](Mesh-LLM/mesh-llm#2471)
moved mesh-llm to zip 9, but the latest release (v0.78.1) still locks
zip 8.6.0. The existing comment already says to remove these ignores on
the mesh-llm bump that ships it.

## Testing

On a Linux workstation at the PR head: `cargo-deny check` passes, `cargo
check --locked -p buzz-relay` builds, and the `buzz-relay` invite tests
(the `pulldown-cmark` caller) pass.

## Simpler?

No new concepts: one lockfile bump and one ignore entry that joins an
existing, already-documented group with the same removal trigger.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Signed-off-by: Luke Tornquist <[email protected]>
Co-authored-by: Elrond <28d6302a099e5225b02c4155ac4236e4912603df2ab08dbfc2f4fef08ce598c8@buzz.block.builderlab.xyz>
Co-authored-by: Claude Opus 5.5 <[email protected]>
(cherry picked from commit c9b8f11)
Signed-off-by: SanHsien <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants