Strictly handle expected tag value types
Resolve several TODOs where tag values were cast from u32 without checks by providing generic methods that error when the value fails casting to the desired type. In addition to being more correct, this simplifies and shortens decoding logic. Remove `find_tag_u32` and `find_tag_u32_vec` as they are now redundant and a GitHub code search found no usages outside copies of `image-tiff`.
This commit is contained in:
1 parent
1fafcccb36
commit
d510a9f4ab
2 files changed
+57
-54
No files matched your search
+16
-1
@@ -38,8 +38,9 @@ pub enum TiffFormatError {
|
||||
ImageFileDirectoryNotFound,
|
||||
InconsistentSizesEncountered,
|
||||
InvalidTag,
|
||||
InvalidTagValueType(Tag),
|
||||
RequiredTagNotFound(Tag),
|
||||
UnknownPredictor(u32),
|
||||
UnknownPredictor(u16),
|
||||
UnsignedIntegerExpected(Value),
|
||||
SignedIntegerExpected(Value),
|
||||
InflateError(InflateError),
|
||||
@@ -57,6 +58,8 @@ impl fmt::Display for TiffFormatError {
|
||||
ImageFileDirectoryNotFound => write!(fmt, "Image file directory not found."),
|
||||
InconsistentSizesEncountered => write!(fmt, "Inconsistent sizes encountered."),
|
||||
InvalidTag => write!(fmt, "Image contains invalid tag."),
|
||||
InvalidTagValueType(ref tag) =>
|
||||
write!(fmt, "Tag `{:?}` did not have the expected value type.", tag),
|
||||
RequiredTagNotFound(ref tag) => write!(fmt, "Required tag `{:?}` not found.", tag),
|
||||
UnknownPredictor(ref predictor) => {
|
||||
write!(fmt, "Unknown predictor “{}” encountered", predictor)
|
||||
@@ -202,5 +205,17 @@ impl From<string::FromUtf8Error> for TiffError {
|
||||
}
|
||||
}
|
||||
|
||||
impl From<TiffFormatError> for TiffError {
|
||||
fn from(err: TiffFormatError) -> TiffError {
|
||||
TiffError::FormatError(err)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<TiffUnsupportedError> for TiffError {
|
||||
fn from(err: TiffUnsupportedError) -> TiffError {
|
||||
TiffError::UnsupportedError(err)
|
||||
}
|
||||
}
|
||||
|
||||
/// Result of an image decoding/encoding process
|
||||
pub type TiffResult<T> = Result<T, TiffError>;
|
||||
Reference in new issue
Block a user