Skip to main content

ZipInconsistency

Enum ZipInconsistency 

Source
#[non_exhaustive]
pub enum ZipInconsistency { HeaderMismatch { entry: ZipEntryIndex, field: ZipHeaderField, name: String, }, DuplicateName { record: CentralRecordOrdinal, name: String, }, OverlappingEntries, HiddenLocalHeader { offset: u64, region: HiddenRegion, }, IgnoredEndRecord { offset: u64, }, StrayCentralRecord { offset: u64, }, StrayEndRecord { offset: u64, kind: EndRecordKind, }, DescriptorOverrun { entry: ZipEntryIndex, offset: u64, }, XlTypeDivergence { entry: ZipEntryIndex, offset: u64, }, UncountedCentralRecords { counted: usize, found: usize, }, HeaderUncomparable { entry: ZipEntryIndex, name: String, reason: ZipUncomparable, }, }
Expand description

A structural finding that makes a ZIP archive ambiguous between readers.

Names are the raw central directory bytes decoded lossily; the zip crate’s own key can differ after Unicode Path substitution.

§Examples

use exarch_core::CentralRecordOrdinal;
use exarch_core::ZipInconsistency;

let finding = ZipInconsistency::DuplicateName {
    record: CentralRecordOrdinal::new(1),
    name: "a.txt".to_string(),
};
assert_eq!(
    finding.to_string(),
    "duplicate entry name \"a.txt\" (record 1)"
);

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

HeaderMismatch

A local header disagrees with its central directory record.

Fields

§entry: ZipEntryIndex

Entry in the crate’s entry map.

§field: ZipHeaderField

Field that differs.

§name: String

Central directory name of the entry.

§

DuplicateName

Two or more central directory records share a name.

Fields

§record: CentralRecordOrdinal

Position in the raw central directory of a record that the zip crate collapsed into a later record with the same name.

§name: String

Shared name.

§

OverlappingEntries

Entry data ranges intersect.

§

HiddenLocalHeader

A local header exists that no central directory record maps.

Fields

§offset: u64

Absolute offset of the unmapped header.

§region: HiddenRegion

Part of the file the header was found in.

§

IgnoredEndRecord

An end of central directory record other than the one the reader used follows it, so a reader that picks another candidate sees another directory.

Fields

§offset: u64

Absolute offset of the ignored record.

§

StrayCentralRecord

A central directory record sits outside the central directory, in the bytes before the first entry or between entries, so a streaming reader that stops listing at the first central record never sees the entries after it.

Fields

§offset: u64

Absolute offset of the stray record.

§

StrayEndRecord

An end record signature sits in the bytes before the first entry or between entries, so a streaming reader that stops listing at it never sees the entries after it.

Fields

§offset: u64

Absolute offset of the stray record.

§kind: EndRecordKind

Kind of end record the signature starts.

§

DescriptorOverrun

A data descriptor makes a streaming reader resume past the next entry header, so it skips or misreads that entry.

Fields

§entry: ZipEntryIndex

Entry whose descriptor is misread.

§offset: u64

Absolute offset where the entry’s data ends and the descriptor starts.

§

XlTypeDivergence

An xl extra field, in the local header or the central record, gives an entry a file type that differs from the one its central attributes give, so a reader that honours the field extracts another kind of entry than one that follows the attributes.

Fields

§entry: ZipEntryIndex

Entry whose types differ.

§offset: u64

Absolute offset of the entry’s local header.

§

UncountedCentralRecords

The central directory holds more records than its end record counts.

Fields

§counted: usize

Count claimed by the end of central directory record.

§found: usize

Records actually present.

§

HeaderUncomparable

A local header could not be compared with its central directory record, so a disagreement between them cannot be ruled out.

Fields

§entry: ZipEntryIndex

Entry in the crate’s entry map.

§name: String

Central directory name of the entry.

§reason: ZipUncomparable

Why the comparison was not possible.

Trait Implementations§

Source§

impl Clone for ZipInconsistency

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for ZipInconsistency

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for ZipInconsistency

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Eq for ZipInconsistency

Source§

impl PartialEq for ZipInconsistency

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for ZipInconsistency

Auto Trait Implementations§

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> Same for T

Source§

type Output = T

Should always be Self
Source§

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

Source§

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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

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

Source§

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.