Struct rc_zip::parse::Entry

source ·
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

source

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.

source§

impl Entry

source

pub fn kind(&self) -> EntryKind

Determine the kind of this entry based on its mode.

Trait Implementations§

source§

impl Clone for Entry

source§

fn clone(&self) -> Entry

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

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> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more