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.