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,13 +260,16 @@ void RafImage::readMetadata() {
} }
// Retreive metadata from embedded JPEG preview image. // Retreive metadata from embedded JPEG preview image.
auto jpg_io = std::make_unique<Exiv2::MemIo>(jpg_buf.data(), jpg_buf.size()); try {
auto jpg_img = JpegImage(std::move(jpg_io), false); auto jpg_io = std::make_unique<Exiv2::MemIo>(jpg_buf.data(), jpg_buf.size());
jpg_img.readMetadata(); auto jpg_img = JpegImage(std::move(jpg_io), false);
setByteOrder(jpg_img.byteOrder()); jpg_img.readMetadata();
xmpData_ = jpg_img.xmpData(); setByteOrder(jpg_img.byteOrder());
exifData_ = jpg_img.exifData(); xmpData_ = jpg_img.xmpData();
iptcData_ = jpg_img.iptcData(); exifData_ = jpg_img.exifData();
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]