RAF: Ignore JPEG decoder errors if the JPEG offsets are invalid

This commit is contained in:
Daniel Vogelbacher 2023-05-17 18:26:24 +02:00
parent d27c5ac838
commit f5f1f30f5b
2 changed files with 11 additions and 8 deletions

View File

@ -260,6 +260,7 @@ void RafImage::readMetadata() {
} }
// Retreive metadata from embedded JPEG preview image. // Retreive metadata from embedded JPEG preview image.
try {
auto jpg_io = std::make_unique<Exiv2::MemIo>(jpg_buf.data(), jpg_buf.size()); auto jpg_io = std::make_unique<Exiv2::MemIo>(jpg_buf.data(), jpg_buf.size());
auto jpg_img = JpegImage(std::move(jpg_io), false); auto jpg_img = JpegImage(std::move(jpg_io), false);
jpg_img.readMetadata(); jpg_img.readMetadata();
@ -267,6 +268,8 @@ void RafImage::readMetadata() {
xmpData_ = jpg_img.xmpData(); xmpData_ = jpg_img.xmpData();
exifData_ = jpg_img.exifData(); exifData_ = jpg_img.exifData();
iptcData_ = jpg_img.iptcData(); iptcData_ = jpg_img.iptcData();
} catch (const Exiv2::Error&) {
}
exifData_["Exif.Image2.JPEGInterchangeFormat"] = getULong(jpg_img_offset, bigEndian); exifData_["Exif.Image2.JPEGInterchangeFormat"] = getULong(jpg_img_offset, bigEndian);
exifData_["Exif.Image2.JPEGInterchangeFormatLength"] = getULong(jpg_img_length, bigEndian); exifData_["Exif.Image2.JPEGInterchangeFormatLength"] = getULong(jpg_img_length, bigEndian);

View File

@ -22,7 +22,7 @@ class OutOfMemoryInRafImageReadMetadata(metaclass=CaseMeta):
$kerCorruptedMetadata $kerCorruptedMetadata
""", """,
"""Exiv2 exception in print action for file $filename2: """Exiv2 exception in print action for file $filename2:
This does not look like a TIFF image $kerCorruptedMetadata
""" """
] ]
retval = [1,1] retval = [1,1]