RPNX::Compress
Self-contained C++20 compression and ZIP library
 
Loading...
Searching...
No Matches
rpnx::compression::zip_detail Namespace Reference

Internal ZIP32 parsing and output-iterator support. More...

Classes

class  counting_output_iterator
 Output iterator that counts bytes while forwarding every assignment. More...
 
struct  directory_record
 Directory metadata retained until the central directory is emitted. More...
 

Functions

bool path_is_safe (std::string const &path)
 Tests whether a member path is confined to a relative extraction root.
 
template<typename output_iterator>
output_iterator extract_archive (std::span< std::byte const > archive, output_iterator output, zip_extraction_options const &options)
 Extracts an archive that has been materialized for random access.
 

Detailed Description

Internal ZIP32 parsing and output-iterator support.

Function Documentation

◆ extract_archive()

template<typename output_iterator>
output_iterator rpnx::compression::zip_detail::extract_archive ( std::span< std::byte const > archive,
output_iterator output,
zip_extraction_options const & options )

Extracts an archive that has been materialized for random access.

Template Parameters
output_iteratorOutput iterator accepting zip_entry values.
Parameters
archiveComplete archive image.
outputDestination iterator, taken and returned by value.
optionsMember-count and uncompressed-size limits.
Returns
The destination iterator advanced past the final extracted member.
Exceptions
compression_errorIf structure, paths, sizes, methods, or checksums fail validation, or extraction exceeds a configured limit.

Definition at line 271 of file zip.hpp.

References rpnx::compression::deflate_codec::crc32(), rpnx::compression::decompress(), rpnx::compression::deflate, rpnx::compression::invalid_data, rpnx::compression::zip_extraction_options::maximum_entry_count, rpnx::compression::zip_extraction_options::maximum_entry_size, rpnx::compression::decompression_options::maximum_output_size, rpnx::compression::zip_extraction_options::maximum_total_size, rpnx::compression::output_limit_exceeded, path_is_safe(), rpnx::compression::stored, rpnx::compression::unsupported_feature, and rpnx::compression::zip.

◆ path_is_safe()

bool rpnx::compression::zip_detail::path_is_safe ( std::string const & path)
inlinenodiscard

Tests whether a member path is confined to a relative extraction root.

Parameters
pathPath to validate using ZIP's forward-slash convention.
Returns
true if the non-empty path is relative and contains no parent, drive, backslash, or embedded-null components.

Definition at line 128 of file zip.hpp.

Referenced by rpnx::compression::create_zip(), and extract_archive().