Struct rc_zip::parse::StoredEntry
source · pub struct StoredEntry {
pub entry: Entry,
pub header_offset: u64,
pub external_attrs: u32,
pub creator_version: Version,
pub reader_version: Version,
pub flags: u16,
pub uid: Option<u32>,
pub gid: Option<u32>,
pub mode: Mode,
pub extra_fields: Vec<ExtraField>,
pub inner: StoredEntryInner,
}Expand description
An entry as stored into an Archive. Contains additional metadata and offset information.
Whereas Entry is archive-independent, StoredEntry contains information that is tied to a specific archive.
When reading archives, one deals with a list of StoredEntry, whereas when writing one, one typically only specifies an Entry and provides the entry’s contents: fields like the CRC32 hash, uncompressed size, and compressed size are derived automatically from the input.
Fields§
§entry: EntryArchive-independent information
This contains the entry’s name, timestamps, comment, compression method.
header_offset: u64Offset of the local file header in the zip file
[optional non-zip data]
[local file header 1] <------ header_offset points here
[encryption header 1]
[file data 1]
[data descriptor 1]
...
[central directory]
[optional zip64 end of central directory info]
[end of central directory record]
external_attrs: u32External attributes (zip)
creator_version: VersionVersion of zip supported by the tool that crated this archive.
reader_version: VersionVersion of zip needed to extract this archive.
flags: u16General purpose bit flag
In the zip format, the most noteworthy flag (bit 11) is for UTF-8 names. Other flags can indicate: encryption (unsupported), various compression settings (depending on the Method used).
For LZMA, general-purpose bit 1 denotes the EOS marker.
uid: Option<u32>Unix user ID
Only present if a Unix extra field or New Unix extra field was found.
gid: Option<u32>Unix group ID
Only present if a Unix extra field or New Unix extra field was found.
mode: ModeFile mode
extra_fields: Vec<ExtraField>Any extra fields recognized while parsing the file.
Most of these should be normalized and accessible as other fields, but they are also made available here raw.
inner: StoredEntryInnerThese fields are cheap to clone and needed for entry readers, hence them being in a separate struct
Implementations§
source§impl StoredEntry
impl StoredEntry
sourcepub fn name(&self) -> &str
pub fn name(&self) -> &str
Returns the entry’s name. See also sanitized_name(), which returns a sanitized version of the name.
This should be a relative path, separated by /. However, there are zip
files in the wild with all sorts of evil variants, so, be conservative
in what you accept.
sourcepub fn sanitized_name(&self) -> Option<&str>
pub fn sanitized_name(&self) -> Option<&str>
Returns a sanitized version of the entry’s name, if it seems safe. In particular, if this method feels like the entry name is trying to do a zip slip (cf. https://snyk.io/research/zip-slip-vulnerability), it’ll return None.
Other than that, it will strip any leading slashes on non-Windows OSes.
sourcepub fn comment(&self) -> Option<&str>
pub fn comment(&self) -> Option<&str>
The entry’s comment, if any.
When reading a zip file, an empty comment results in None.
sourcepub fn modified(&self) -> DateTime<Utc>
pub fn modified(&self) -> DateTime<Utc>
This entry’s “last modified” timestamp - with caveats
Due to the history of the ZIP file format, this may be inaccurate. It may be offset by a few hours, if there is no extended timestamp information. It may have a resolution as low as two seconds, if only MSDOS timestamps are present. It may default to the Unix epoch, if something went really wrong.
If you’re reading this after the year 2038, or after the year 2108, godspeed.
source§impl StoredEntry
impl StoredEntry
sourcepub fn contents(&self) -> EntryContents
pub fn contents(&self) -> EntryContents
Determine EntryContents of this entry based on its mode.
Trait Implementations§
source§impl Clone for StoredEntry
impl Clone for StoredEntry
source§fn clone(&self) -> StoredEntry
fn clone(&self) -> StoredEntry
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more