png

Enum DecodingError

source
pub enum DecodingError {
    IoError(Error),
    Format(FormatError),
    Parameter(ParameterError),
    LimitsExceeded,
}
Expand description

Any kind of error during PNG decoding.

This enumeration provides a very rough analysis on the origin of the failure. That is, each variant corresponds to one kind of actor causing the error. It should not be understood as a direct blame but can inform the search for a root cause or if such a search is required.

Variants§

§

IoError(Error)

An error in IO of the underlying reader.

Note that some IO errors may be recoverable - decoding may be retried after the error is resolved. For example, decoding from a slow stream of data (e.g. decoding from a network stream) may occasionally result in std::io::ErrorKind::UnexpectedEof kind of error, but decoding can resume when more data becomes available.

§

Format(FormatError)

The input image was not a valid PNG.

There isn’t a lot that can be done here, except if the program itself was responsible for creating this image then investigate the generator. This is internally implemented with a large Enum. If You are interested in accessing some of the more exact information on the variant then we can discuss in an issue.

§

Parameter(ParameterError)

An interface was used incorrectly.

This is used in cases where it’s expected that the programmer might trip up and stability could be affected. For example when:

  • The decoder is polled for more animation frames despite being done (or not being animated in the first place).
  • The output buffer does not have the required size.

As a rough guideline for introducing new variants parts of the requirements are dynamically derived from the (untrusted) input data while the other half is from the caller. In the above cases the number of frames respectively the size is determined by the file while the number of calls

If you’re an application you might want to signal that a bug report is appreciated.

§

LimitsExceeded

The image would have required exceeding the limits configured with the decoder.

Note that Your allocations, e.g. when reading into a pre-allocated buffer, is NOT considered part of the limits. Nevertheless, required intermediate buffers such as for singular lines is checked against the limit.

Note that this is a best-effort basis.

Trait Implementations§

source§

impl Debug for DecodingError

source§

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

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

impl Display for DecodingError

source§

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

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

impl Error for DecodingError

source§

fn cause(&self) -> Option<&(dyn Error + 'static)>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
1.30.0 · source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
source§

impl From<DecodingError> for Error

source§

fn from(err: DecodingError) -> Error

Converts to this type from the input type.
source§

impl From<Error> for DecodingError

source§

fn from(err: Error) -> DecodingError

Converts to this type from the input type.

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

source§

default 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 = 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>,

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.