From 79ea86a6a1e3da72ffc916ab57a66df5415a4590 Mon Sep 17 00:00:00 2001 From: Jesse Evans Date: Tue, 22 Mar 2022 12:53:25 -0700 Subject: Update PIEX from tip of tree Add support for Sony ARW 4.0. Fix overflow issue in GetOlympusPreviewImage. Fix issue with Canon RP raw CR3 files. Test: Ran internal tests and eng verified Change-Id: Ib2b9a76f657fd84158f143aa383f07ac0726e932 --- src/image_type_recognition/image_type_recognition_lite.cc | 3 ++- src/piex.cc | 4 ++-- src/tiff_parser.cc | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/image_type_recognition/image_type_recognition_lite.cc b/src/image_type_recognition/image_type_recognition_lite.cc index cb32e1c..5976f42 100644 --- a/src/image_type_recognition/image_type_recognition_lite.cc +++ b/src/image_type_recognition/image_type_recognition_lite.cc @@ -183,13 +183,14 @@ class ArwTypeChecker : public TypeChecker { // Search for (kSignatureFileTypeSection + kSignatureVersions[i]) in first // requested bytes const string kSignatureSection("\x00\xb0\x01\x00\x04\x00\x00\x00", 8); - const int kSignatureVersionsSize = 5; + const int kSignatureVersionsSize = 6; const string kSignatureVersions[kSignatureVersionsSize] = { string("\x02\x00", 2), // ARW 1.0 string("\x03\x00", 2), // ARW 2.0 string("\x03\x01", 2), // ARW 2.1 string("\x03\x02", 2), // ARW 2.2 string("\x03\x03", 2), // ARW 2.3 + string("\x04\x00", 2), // ARW 4.0 }; bool matched = false; for (int i = 0; i < kSignatureVersionsSize; ++i) { diff --git a/src/piex.cc b/src/piex.cc index 4b868d9..ac2ef0b 100644 --- a/src/piex.cc +++ b/src/piex.cc @@ -283,9 +283,9 @@ bool GetOlympusPreviewImage(StreamInterface* stream, } if (raw_processing_ifd.Has(kOlymTagAspectFrame)) { - std::vector aspect_frame(4); + std::vector aspect_frame; if (raw_processing_ifd.Get(kOlymTagAspectFrame, &aspect_frame) && - aspect_frame[2] > aspect_frame[0] && + aspect_frame.size() == 4 && aspect_frame[2] > aspect_frame[0] && aspect_frame[3] > aspect_frame[1]) { preview_image_data->full_width = aspect_frame[2] - aspect_frame[0] + 1; preview_image_data->full_height = aspect_frame[3] - aspect_frame[1] + 1; diff --git a/src/tiff_parser.cc b/src/tiff_parser.cc index ac6d006..3ceaa75 100644 --- a/src/tiff_parser.cc +++ b/src/tiff_parser.cc @@ -720,8 +720,8 @@ bool TiffParser::ParseIfd(const std::uint32_t ifd_offset, IfdVector* tiff_directory) { std::uint32_t next_ifd_offset; TiffDirectory tiff_ifd(static_cast(endian_)); - if (!ParseDirectory(tiff_offset_, ifd_offset, endian_, desired_tags, - stream_, &tiff_ifd, &next_ifd_offset) || + if (!ParseDirectory(tiff_offset_, ifd_offset, endian_, desired_tags, stream_, + &tiff_ifd, &next_ifd_offset) || !ParseSubIfds(tiff_offset_, desired_tags, max_number_ifds, endian_, stream_, &tiff_ifd)) { return false; -- cgit v1.2.3