exarch-core 0.6.0

Memory-safe archive extraction library with security validation
Documentation
//! Memory-safe archive extraction library with security validation.
//!
//! `exarch-core` provides a safe API for extracting archive files (tar, zip)
//! with built-in protection against common security vulnerabilities like
//! path traversal, zip bombs, symlink attacks, and hardlink attacks.
//!
//! # Examples
//!
//! ```no_run
//! use exarch_core::SecurityConfig;
//! use exarch_core::extract_archive;
//!
//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
//! let config = SecurityConfig::default();
//! let report = extract_archive("archive.tar.gz", "/output/dir", &config)?;
//! println!("Extracted {} files", report.files_extracted);
//! # Ok(())
//! # }
//! ```

#![deny(unsafe_code)]
#![warn(missing_docs)]

pub mod api;
pub mod archive;
pub mod config;
pub(crate) mod copy;
pub mod creation;
pub mod error;
pub mod formats;
pub mod inspection;
pub mod report;
pub mod security;
pub(crate) mod test_utils;
pub mod types;

// Re-export main API types
pub use api::create_archive;
pub use api::create_archive_with_progress;
pub use api::extract_archive;
pub use api::extract_archive_with_options;
pub use api::extract_archive_with_options_and_progress;
pub use api::extract_archive_with_progress;
pub use api::list_archive;
pub use api::verify_archive;
pub use archive::Archive;
pub use archive::ArchiveBuilder;
pub use config::ExtractionOptions;
pub use config::SecurityConfig;
pub use config::Unvalidated;
pub use config::Validated;
pub use error::ArchiveError;
pub use error::FfiErrorMessage;
pub use error::IoContext;
pub use error::QuotaResource;
pub use error::Result;
/// Formats an archive-relative, attacker-authored path for an FFI error
/// message without redaction. Shared by `exarch-python` and `exarch-node`.
pub use error::redaction::format_entry_path_for_error;
/// Sanitizes a `std::io::Error` message for an FFI error message. Shared by
/// `exarch-python` and `exarch-node`.
pub use error::redaction::sanitize_io_error_for_error;
/// Redacts a host-derived filesystem path for an FFI error message in
/// release builds. Shared by `exarch-python` and `exarch-node`.
pub use error::redaction::sanitize_path_for_error;
pub use report::ExtractionReport;
pub use report::NoopProgress;
pub use report::ProgressCallback;

// Re-export creation types
pub use creation::ArchiveCreator;
pub use creation::CreationConfig;
pub use creation::CreationReport;
pub use formats::traits::FormatCreator;

// Re-export inspection types
pub use inspection::ArchiveEntry;
pub use inspection::ArchiveManifest;
pub use inspection::CheckStatus;
pub use inspection::IssueCategory;
pub use inspection::IssueSeverity;
pub use inspection::ManifestEntryType;
pub use inspection::VerificationIssue;
pub use inspection::VerificationReport;
pub use inspection::VerificationStatus;

// Re-export security types
/// Summary statistics produced by the validation pipeline; see
/// [`security::ValidationReport`].
pub use security::ValidationReport;
/// Maximum length, in bytes, of a single `SecurityConfig` entry — an
/// allowed extension or a banned path component. Shared by `exarch-python`
/// and `exarch-node`.
pub use security::boundary::MAX_CONFIG_ENTRY_LENGTH;
/// Maximum length, in bytes, of a raw path string accepted at the FFI
/// boundary. Shared by `exarch-python` and `exarch-node`.
pub use security::boundary::MAX_PATH_LENGTH;
/// Validates a single caller-supplied `SecurityConfig` entry string.
/// Shared by `exarch-python` and `exarch-node`.
pub use security::boundary::validate_config_entry;
/// Validates a raw, caller-supplied path string before it enters the
/// archive pipeline. Shared by `exarch-python` and `exarch-node`.
pub use security::boundary::validate_raw_path_str;

// Re-export types module for easier access
pub use types::DestDir;
pub use types::EntryType;
pub use types::SafePath;
pub use types::SafeSymlink;