[package]
edition = "2024"
rust-version = "1.98.0"
name = "exarch-core"
version = "0.7.0"
authors = ["bug-ops"]
build = false
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Memory-safe archive extraction library with security validation"
homepage = "https://github.com/bug-ops/exarch"
readme = "README.md"
keywords = [
"archive",
"extraction",
"security",
"tar",
"zip",
]
categories = [
"compression",
"filesystem",
]
license = "MIT OR Apache-2.0"
repository = "https://github.com/bug-ops/exarch"
resolver = "2"
[features]
testing = []
[lib]
name = "exarch_core"
path = "src/lib.rs"
[[example]]
name = "create_archive"
path = "examples/create_archive.rs"
[[example]]
name = "dhat_creation"
path = "examples/dhat_creation.rs"
[[example]]
name = "dhat_extraction"
path = "examples/dhat_extraction.rs"
[[test]]
name = "empty_entry_name"
path = "tests/empty_entry_name.rs"
[[test]]
name = "integration_tests"
path = "tests/integration_tests.rs"
[[test]]
name = "link_file_count"
path = "tests/link_file_count.rs"
[[test]]
name = "link_target_bound"
path = "tests/link_target_bound.rs"
[[test]]
name = "property_tests"
path = "tests/property_tests.rs"
required-features = ["testing"]
[[test]]
name = "sevenz_decode_memory"
path = "tests/sevenz_decode_memory.rs"
[[test]]
name = "sevenz_entry_classifier"
path = "tests/sevenz_entry_classifier.rs"
[[test]]
name = "sevenz_integration"
path = "tests/sevenz_integration.rs"
[[test]]
name = "sevenz_reparse_point"
path = "tests/sevenz_reparse_point.rs"
[[test]]
name = "sevenz_root_entry"
path = "tests/sevenz_root_entry.rs"
[[test]]
name = "sevenz_stream_map"
path = "tests/sevenz_stream_map.rs"
[[test]]
name = "sevenz_unix_symlink"
path = "tests/sevenz_unix_symlink.rs"
[[test]]
name = "skip_duplicates_integration"
path = "tests/skip_duplicates_integration.rs"
[[test]]
name = "symlink_parent_resolution"
path = "tests/symlink_parent_resolution.rs"
[[test]]
name = "tar_alloc_bound"
path = "tests/tar_alloc_bound.rs"
[[test]]
name = "tar_directory_name_payload"
path = "tests/tar_directory_name_payload.rs"
[[test]]
name = "tar_multi_member"
path = "tests/tar_multi_member.rs"
[[test]]
name = "tar_root_entry"
path = "tests/tar_root_entry.rs"
[[test]]
name = "tar_special_entry_parity"
path = "tests/tar_special_entry_parity.rs"
[[test]]
name = "ui"
path = "tests/ui.rs"
[[test]]
name = "verify_integrity"
path = "tests/verify_integrity.rs"
[[test]]
name = "xz_decoder_memory"
path = "tests/xz_decoder_memory.rs"
[[test]]
name = "zip_corpus"
path = "tests/zip_corpus.rs"
[[test]]
name = "zip_declared_size"
path = "tests/zip_declared_size.rs"
[[test]]
name = "zip_family_integration"
path = "tests/zip_family_integration.rs"
[[test]]
name = "zip_root_dir_entry"
path = "tests/zip_root_dir_entry.rs"
[[test]]
name = "zip_unsupported_method"
path = "tests/zip_unsupported_method.rs"
[[test]]
name = "zip_zero_compressed"
path = "tests/zip_zero_compressed.rs"
[[bench]]
name = "creation"
path = "benches/creation.rs"
harness = false
[[bench]]
name = "extraction"
path = "benches/extraction.rs"
harness = false
[[bench]]
name = "progress"
path = "benches/progress.rs"
harness = false
[[bench]]
name = "validation"
path = "benches/validation.rs"
harness = false
required-features = ["testing"]
[dependencies.bzip2]
version = "0.6"
[dependencies.flate2]
version = "1.1"
[dependencies.lzma-rust2]
version = "0.23"
features = ["std"]
default-features = false
[dependencies.rustc-hash]
version = "2.1"
[dependencies.sevenz-rust2]
version = "0.24"
[dependencies.smallvec]
version = "1.16"
[dependencies.tar]
version = "0.4"
[dependencies.tempfile]
version = "3.27"
[dependencies.thiserror]
version = "2.0"
[dependencies.time]
version = "0.3"
[dependencies.typed-path]
version = "0.13"
default-features = false
[dependencies.walkdir]
version = "2.5"
[dependencies.xz2]
version = "0.1"
features = ["static"]
[dependencies.zip]
version = "9.1"
features = [
"deflate",
"deflate64",
"bzip2",
"zstd",
"time",
]
default-features = false
[dependencies.zstd]
version = "0.14"
[dev-dependencies.criterion]
version = "0.8"
[dev-dependencies.dhat]
version = "0.3"
[dev-dependencies.proptest]
version = "1.12"
[dev-dependencies.trybuild]
version = "1.0"
[target.'cfg(target_os = "macos")'.dependencies.unicode-normalization]
version = "0.1.26"
[target."cfg(unix)".dependencies.libc]
version = "0.2"
[lints.clippy]
assert_is_empty = "allow"
cast_precision_loss = "allow"
expect_used = "warn"
missing_const_for_fn = "allow"
no_effect_underscore_binding = "allow"
struct_excessive_bools = "allow"
unnecessary_literal_bound = "allow"
unwrap_used = "warn"
[lints.clippy.all]
level = "warn"
priority = -1
[lints.clippy.nursery]
level = "warn"
priority = -1
[lints.clippy.pedantic]
level = "warn"
priority = -1
[lints.rust]
missing_docs = "warn"
unsafe_code = "deny"
[lints.rust.unexpected_cfgs]
level = "warn"
priority = 0
check-cfg = ["cfg(fuzzing)"]