--- # pages-u3zc title: Support .tar.xz uploads (xz/LZMA2) status: completed type: task priority: normal created_at: 2026-07-21T04:15:18Z updated_at: 2026-07-21T04:33:38Z parent: 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(&mut input, &mut output)`. Decompress into a `LimitedWriter` bounded by `max_uncompressed_total` so an xz bomb aborts mid-decompress and never fully materializes. Then feed the bounded buffer to `build_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.