Skip to content

fix(install): use patched archive and TLS dependencies - #3

Merged
senamakel merged 1 commit into
tinyhumansai:epic/8056-modules-wiringfrom
senamakel:epic-8056-browser-zip-security-corrected
Oct 18, 2026
Merged

senamakel merged 1 commit into
tinyhumansai:epic/8056-modules-wiringfrom
senamakel:epic-8056-browser-zip-security-corrected

Conversation

@senamakel

Copy link
Copy Markdown
Member

The installer applies archive-provided Unix permissions, and ZIP 8 preserves SUID/SGID bits. Upgrade ZIP to 9.0.4, whose unix_mode() clears privilege bits, and rustls to patched 0.23.46. The lock changes include only those repairs and required nix/libc/webpki dependencies. Existing extraction code consumes the corrected behavior directly.

Add deterministic archive fixtures and tests for Chrome-directory stripping, normal and nested files, executable permissions, traversal negative controls, CRC errors, and truncation. The checked-in Python stdlib generator verifies fixture bytes without writing by default. Add this exact epic branch to PR CI; package version stays 0.38.1 and main-only publication triggers are unchanged.

Validation:

  • Genuine Linux regression: ZIP 8.2 retains mode 0o4755 and fails; the same test under ZIP 9.0.4 passes with 0o755.
  • Linux package suite: 1,411 library tests pass, 143 ignored; all eight CLI/integration/doc tests pass.
  • Actual Rust 1.89 build and four archive tests, formatting, version synchronization, fixture checks, and cargo-deny advisories pass.
  • Strict Rust 1.89 Clippy reports four pre-existing new_without_default errors in untouched native element/network/recording/tracing files. These files are byte-identical to the base; strict lint is not claimed green.
  • The macOS full suite has two unchanged long Unix-socket path (SUN_LEN) failures. New archive tests pass on macOS and Linux. Linux verification used a disposable non-root container with its natural home directory.
  • Independent source and fixture review found no blockers.

This prerequisite unblocks TinyComputer's supply-chain gate in tinyhumansai/tinycomputer#108. The epic base preserves TinyComputer's previously recorded agent-browser revision; actual hosted CI must pass before a normal merge into the nondefault epic branch. The final main rollup remains separate.

Part of tinyhumansai/openhuman#8056

@tinysweeper

tinysweeper Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

Tiny Sweeper review

Tiny Sweeper completed its review; deterministic results follow.

State: Ready for maintainer review
Priority: low
Reviewed head: 2b10c825c964
Updated: 2026-10-17T08:40:37Z

Review snapshot

Change surface Files Review signal Count
Production 1 Active findings 0
Tests 6 Noted findings 0
Documentation 0 Resolved findings 0
Configuration 2 Pending checks/questions 0

Completeness: Complete
Test assessment: Test coverage is assessed from changed tests and lane evidence; execution is not claimed without trusted check data.

Features

  • Modified — zip dependency bump: Changes the archive dependency from zip 8.2.0 to 9.0.0 with default features disabled and the deflate feature enabled. (cli/Cargo.toml)
  • Added — extract_zip test module registration: Registers install_archive_tests under #[cfg(test)] in install.rs so the new extract_zip tests compile with the crate. (cli/src/install.rs#mod tests {, cli/src/install.rs)
  • Added — extract_zip archive tests: Adds tests covering root stripping, regular file and directory extraction, empty-directory preservation, executable-bit preservation and privileged-bit clearing, parent-path containment, and CRC/truncation error handling. (cli/src/install_archive_tests.rs)
  • Added — installer fixture generator: Adds a Python generator that can write or check ZIP fixture bytes, with timestamps and modes matching the fixtures. (cli/src/testdata/generate_installer_fixtures.py)
  • Added — ZIP fixtures: Adds binary fixtures installer-valid.zip, installer-unsafe-paths.zip, installer-corrupt-crc.zip, and installer-truncated.zip used by the new tests. (cli/src/testdata/installer-valid.zip, cli/src/testdata/installer-unsafe-paths.zip, cli/src/testdata/installer-corrupt-crc.zip, cli/src/testdata/installer-truncated.zip)
  • Modified — CI pull_request trigger branch: Adds epic/8056-modules-wiring to pull_request branches in the workflow, widening when CI runs. (.github/workflows/ci.yml#on:, .github/workflows/ci.yml)

Tests

  • added — extract_zip strips the chrome-linux64 root, extracts nested regular files and directories, preserves empty directories, and checks decompressed contents.: Exercises real extract_zip behaviour with assertions that can fail; no execution or pass status is provided. (cli/src/install_archive_tests.rs, cli/src/testdata/installer-valid.zip)
  • added — extract_zip normalizes parent paths without escaping destination; the sentinel outside remains unchanged and escape.txt lands inside the destination.: Real containment test with a sentinel assertion that can fail if path normalization regresses. (cli/src/install_archive_tests.rs, cli/src/testdata/installer-unsafe-paths.zip)
  • added — extract_zip rejects corrupt-CRC and truncated archives.: Real error-path assertions; no execution or pass status is provided. (cli/src/install_archive_tests.rs, cli/src/testdata/installer-corrupt-crc.zip, cli/src/testdata/installer-truncated.zip)

Findings

No active actionable findings.

Before merge

None.

Agent review details

critique

  • Conclusion: Success
  • Scope reviewed: all assigned evidence
  • Positive: Critique lane reviewed the changed files and reported 0 findings.
  • Lane summary: Reviewed 5 files; 0 findings. _The code index for this repository is cold, so this review saw the diff alone._

security

  • Conclusion: Success
  • Scope reviewed: all assigned evidence
  • Positive: Security lane reviewed the changed files and reported 0 findings.
  • Lane summary: Reviewed 5 files; 0 findings. _The code index for this repository is cold, so this review saw the diff alone._

tests

  • Conclusion: Success
  • Scope reviewed: all assigned evidence
  • Positive: The new tests exercise real behaviour of extract_zip with assertions that can fail, and the fixture generator is checked in alongside them.
  • Lane summary: The new tests exercise real behaviour of `extract_zip` (root stripping, empty-directory and executable-bit preservation, parent-path containment, CRC and truncation errors) with assertions that can fail, and the fixture generator is checked in alongside them. The only concern is that the fixtures themselves are not regenerated or verified by any lane in CI — the `--check` mode of `generate_installer_fixtures.py` is never invoked from the workflow or from a test — but that is a coverage gap rather than a defect in this change, and nothing in the diff shows a test that would pass incorrectly. _The code index for this repository is cold, so this review saw the diff alone._

commits

  • Conclusion: Neutral
  • Scope reviewed: all assigned evidence
  • Positive: Nothing sensitive was found in what this pull request commits.
  • Lane summary: Nothing sensitive found in what this pull request commits.

description

  • Conclusion: Success
  • Scope reviewed: all assigned evidence
  • Positive: No code defect was found in the diff itself.
  • Lane summary: The change is a dependency bump (zip 8.2.0 to 9.0.0 in cli/Cargo.toml), a new test module with generated ZIP fixtures, and an added PR trigger branch in .github/workflows/ci.yml. The description overstates two things: it says the lock was upgraded to zip 9.0.4 while cli/Cargo.toml pins 9.0.0, and it says a checked-in generator runs in verification mode by default when running the script with no arguments actually writes the fixture files; the workflow change also widens pull_request branches without being mentioned. No code defect found in the diff itself. _The code index for this repository is cold, so this review saw the diff alone._
Evidence and run details
  • Models: deep, deepseek-v4.1-flash
  • Spend: $0.001084
  • Tokens: 200398 input · 12045 output · 59520 cached · 0 embedding
Head State Pass summary
2b10c825c964 ready for maintainer review 0 active finding(s), 0 resolved finding(s) (at 2026-10-17T08:40:37Z)

tinysweeper 0.1.2

@coderabbitai

coderabbitai Bot commented Oct 17, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: b7375ecb-4629-46d1-b57f-ff6c619035c8

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-17T08:43:53.516004Z 2b10c82 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@tinysweeper tinysweeper Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

tinysweeper found nothing blocking. Approving.

             $0.0011 · 200,398 in / 12,045 out · 59,520 cached (30%) · deep, deepseek-v4.1-flash
critique:    $0.0002 · 96,870 in  / 3,171 out  · 31,872 cached (33%) · deepseek-v4.1-flash
security:    $0.0001 · 53,381 in  / 1,160 out  · 19,840 cached (37%) · deepseek-v4.1-flash
tests:       $0.0000 · 16,755 in  / 394 out    · 3,968 cached (24%)  · deepseek-v4.1-flash
description: $0.0001 · 26,135 in  / 1,250 out  · 3,840 cached (15%)  · deepseek-v4.1-flash

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2b10c825c9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".



def info(name, timestamp, compression=ZIP_STORED, mode=None, dos_attributes=0):
entry = ZipInfo(name, date_time=timestamp)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Pin fixture ZIP entries to the Unix creator

On Windows, Python's ZipInfo defaults create_system to 0, whereas these checked-in archives were produced with the Unix value 3. Because that field is stored in every central-directory entry, the generator's default --check reports all fixtures as different on Windows even when their logical inputs are unchanged; --write also marks the permission-bearing entries as DOS records, so they no longer reliably exercise the Unix executable/SUID metadata under test. Set entry.create_system = 3 explicitly when constructing each entry.

Useful? React with 👍 / 👎.

@senamakel
senamakel merged commit 043e251 into tinyhumansai:epic/8056-modules-wiring Oct 18, 2026
17 of 19 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant