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.
vibed/pages/.beans/pages-g39t--support-targz-t...

1.2 KiB

title status type priority created_at updated_at parent
Support .tar.gz / .tgz uploads (gzip) completed task normal 2026-07-21T04:15:09Z 2026-07-21T04:33:38Z pages-w7ow

Wire gzip-compressed tar archives through the dispatch foundation.

  • Crate: flate2 = { version = \"1\", default-features = false, features = [\"rust_backend\"] } in [dependencies] (pure-Rust miniz_oxide backend; wasm-safe).
  • Streaming path: raw bytes -> flate2::read::GzDecoder (or MultiGzDecoder) -> build_tar_manifest. Each tar entry Read flows through read_entry_limited unchanged.
  • Detect via gzip magic 1f 8b.
  • Tests (mirror the zip tests in core/upload.rs): happy multi-file-with-subdirs, missing index.html, path traversal, per-file/total limits, and a gzip tar-bomb rejected by the streaming guard. Build fixtures in-memory with the flate2+tar writers.

Summary of Changes

gzip via flate2 (rust_backend/miniz_oxide). Streaming path: bytes -> GzDecoder -> read_tar_entries; each tar entry flows through read_entry_limited so the bomb guard is preserved. Tests: happy multi-file+subdirs, missing index, traversal, per-file/total limits, streaming bomb.