You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1.3 KiB
1.3 KiB
| title | status | type | priority | created_at | updated_at | parent |
|---|---|---|---|---|---|---|
| Support .tar.xz uploads (xz/LZMA2) | completed | task | normal | 2026-07-21T04:15:18Z | 2026-07-21T04:33:38Z | pages-w7ow |
Wire xz-compressed tar archives through the dispatch foundation.
- Crate:
lzma-rs = \"0.3\"in[dependencies](pure-Rust xz/lzma2 decoder; wasm-safe). - lzma-rs is ONE-SHOT:
xz_decompress<R: BufRead, W: Write>(&mut input, &mut output). Decompress into aLimitedWriterbounded bymax_uncompressed_totalso an xz bomb aborts mid-decompress and never fully materializes. Then feed the bounded buffer tobuild_tar_manifest. - Detect via xz magic
fd 37 7a 58 5a 00. - Tests: happy path, missing index.html, path traversal, size limits, and an xz bomb rejected by the LimitedWriter bound (a small .xz whose decompressed tar exceeds max_uncompressed_total must be rejected before full materialization). Note xz has the largest wasm code-size/CPU cost of the three.
Summary of Changes
xz via lzma-rs 0.3 (one-shot). Decompresses into a LimitedWriter bounded by xz_materialize_cap (= max_uncompressed_total + bounded tar framing) so an xz bomb aborts mid-decompress; bounded buffer then tar-parsed. Fixtures via lzma-rs xz_compress. Tests: happy, missing index, traversal, limits, LimitedWriter bomb rejection.