mirror of
https://github.com/storytold/craft-libs.git
synced 2026-11-12 08:52:32 +00:00
* craft-zip: ZIP preflight, bounded entry read and Budget (from craft-archive, #129) The ZIP half of the craft-archive proposal (#126, #129): an allocation-free check of the end records and central directory that runs before a ZIP reader indexes the archive, a bounded entry read that distrusts the declared size, and the named Budget both charge. The XML half of #129 is not carried: craft-xml bounds XML now. * craft-zip: Archive (entry-count guard, duplicate names, budgeted reads) and Writer check_entry_count is craft-opc's guard: the declared entry count, ZIP64 included, checked on the raw bytes before zip parses the central directory. Archive reads entries within a per-entry limit and a total Budget through read_entry. Duplicate names are found by counting the central directory headers against the entries zip kept. Writer is craft-opc's ZipOut: stored or deflated entries, ZIP64 for large ones, one fixed timestamp. --------- Co-authored-by: skylar taylor-barrick <hi@skylar.cc>
27 lines
1.0 KiB
TOML
27 lines
1.0 KiB
TOML
[package]
|
|
name = "craft-zip"
|
|
description = "ZIP archives from untrusted files: a preflight of the end records and central directory before anything is indexed, entry reads that don't trust declared sizes, duplicate-name detection, and a deterministic writer."
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
rust-version.workspace = true
|
|
repository.workspace = true
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[dependencies]
|
|
thiserror = { workspace = true }
|
|
# `deflate-flate2` with flate2's default miniz_oxide backend, as craft-update pins it (zip's own
|
|
# `deflate` feature would switch a whole app's flate2 to zlib-rs).
|
|
zip = { version = "9", default-features = false, features = ["deflate-flate2"] }
|
|
# The backend of zip's deflate: `deflate-flate2` leaves the choice to the build.
|
|
flate2 = { version = "1", default-features = false, features = ["rust_backend"] }
|
|
|
|
[features]
|
|
# `zip64_entry_count_sample`, the regression input for a reader's own entry-count test.
|
|
test-support = []
|
|
|
|
[dev-dependencies]
|
|
craft-zip = { path = ".", features = ["test-support"] }
|