pub struct Entry {Show 15 fields
pub name: String,
pub method: Method,
pub comment: String,
pub modified: DateTime<Utc>,
pub created: Option<DateTime<Utc>>,
pub accessed: Option<DateTime<Utc>>,
pub header_offset: u64,
pub reader_version: Version,
pub flags: u16,
pub uid: Option<u32>,
pub gid: Option<u32>,
pub crc32: u32,
pub compressed_size: u64,
pub uncompressed_size: u64,
pub mode: Mode,
}
Expand description
Describes a zip archive entry (a file, a directory, a symlink)
Fields§
§name: String
Name of the file
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.
See also Self::sanitized_name, which returns a sanitized version of the name, working around zip slip vulnerabilities.
method: Method
Compression method: Store, Deflate, Bzip2, etc.
comment: String
Comment is any arbitrary user-defined string shorter than 64KiB
modified: 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.
created: Option<DateTime<Utc>>
This entry’s “created” timestamp, if available.
See Self::modified for caveats.
accessed: Option<DateTime<Utc>>
This entry’s “last accessed” timestamp, if available.
See Self::accessed for caveats.
header_offset: u64
Offset 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]
reader_version: Version
Version of zip needed to extract this archive.
flags: u16
General 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.
crc32: u32
CRC-32 hash as found in the central directory.
Note that this may be zero, and the actual CRC32 might be in the local header, or (more commonly) in the data descriptor instead.
compressed_size: u64
Size in bytes, after compression
uncompressed_size: u64
Size in bytes, before compression
This will be zero for directories.
mode: Mode
File mode.
Implementations§
source§impl Entry
impl Entry
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.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Entry
impl RefUnwindSafe for Entry
impl Send for Entry
impl Sync for Entry
impl Unpin for Entry
impl UnwindSafe for Entry
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)