Files
rustfs/crates/zip
cxymds 655f6ae452 fix(s3): align Snowball codec compatibility (#6943)
* fix(s3): harden Snowball extract error boundaries

* fix(s3): close Snowball extract compatibility gaps

* fix(s3): verify Snowball request body completion

* test(s3): reject forged Snowball streaming signatures

* build(deps): pin Snowball archive parser limits

* fix(s3): preserve Snowball trailer and member errors

* docs(architecture): register Snowball tar fork cleanup

* refactor(s3): route Snowball errors through object boundary

* ci(deps): allow pinned tokio-tar source

* fix: align Snowball archive codec detection

* fix(s3): harden Snowball codec compatibility

* fix(s3): preserve Snowball codec compatibility

* test(zip): align yield wake assertion with Tokio

* fix(rio): preserve legacy large-block reads

* fix(zip): accept blank tar numeric fields
2026-08-31 13:09:51 +00:00
..

RustFS

RustFS Zip - Archive Format Detection And Stream Decoding

Archive format detection and async stream decoders for RustFS object storage

CI 📖 Documentation · 🐛 Bug Reports · 💬 Discussions


📖 Overview

RustFS Zip provides the archive primitives used by the RustFS archive extract flow:

  • identify a compression format from an archive extension
  • wrap an async reader in the matching stream decoder
  • carry the shared default archive guardrails

Current Features

  • CompressionFormat::from_extension() for extension-based format detection, including tar-family suffixes such as tgz, tbz2, txz, and tzst
  • CompressionFormat::get_decoder() for async stream decoding of gzip, bzip2, zlib, xz, and zstd, plus a pass-through reader for plain tar
  • ArchiveLimits with the default entry count, entry size, total unpacked size, and path length guardrails

Current Boundaries

  • ZIP has no stream decoder: get_decoder() rejects CompressionFormat::Zip, because ZIP needs central-directory semantics that a forward-only stream cannot provide
  • This crate detects formats and hands back decoders; archive iteration, entry writing, and extraction to disk belong to the caller
  • ArchiveLimits carries the values only; enforcement and the resulting protocol error belong to the caller
  • Archive extraction safety policy remains the responsibility of the RustFS caller for object-store flows

📚 Documentation

For comprehensive documentation, examples, and usage guides, please visit the main RustFS repository.

📄 License

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.