diff --git a/Userland/Libraries/LibGfx/ImageFormats/TIFFLoader.cpp b/Userland/Libraries/LibGfx/ImageFormats/TIFFLoader.cpp index 15332cfc35..94afecac90 100644 --- a/Userland/Libraries/LibGfx/ImageFormats/TIFFLoader.cpp +++ b/Userland/Libraries/LibGfx/ImageFormats/TIFFLoader.cpp @@ -71,9 +71,25 @@ public: return {}; } + Optional> segment_offsets() const + { + return m_metadata.strip_offsets().has_value() ? m_metadata.strip_offsets() : m_metadata.tile_offsets(); + } + + Optional> segment_byte_counts() const + { + return m_metadata.strip_byte_counts().has_value() ? m_metadata.strip_byte_counts() : m_metadata.tile_byte_counts(); + } + ErrorOr ensure_baseline_tags_are_correct() const { - if (m_metadata.strip_offsets()->size() != m_metadata.strip_byte_counts()->size()) + if (!segment_offsets().has_value()) + return Error::from_string_literal("TIFFImageDecoderPlugin: Missing Offsets tag"); + + if (!segment_byte_counts().has_value()) + return Error::from_string_literal("TIFFImageDecoderPlugin: Missing ByteCounts tag"); + + if (segment_offsets()->size() != segment_byte_counts()->size()) return Error::from_string_literal("TIFFImageDecoderPlugin: StripsOffset and StripByteCount have different sizes"); if (!m_metadata.rows_per_strip().has_value() && m_metadata.strip_byte_counts()->size() != 1) @@ -281,7 +297,7 @@ private: auto const strip_width = *m_metadata.image_width(); auto const rows_in_strip = strip_index < strips_offset.size() - 1 ? rows_per_strip : *m_metadata.image_length() - rows_per_strip * strip_index; - auto const decoded_bytes = TRY(strip_decoder(strip_byte_counts[strip_index], {strip_width, rows_in_strip})); + auto const decoded_bytes = TRY(strip_decoder(strip_byte_counts[strip_index], { strip_width, rows_in_strip })); auto decoded_strip = make(decoded_bytes); auto decoded_stream = make(move(decoded_strip)); diff --git a/Userland/Libraries/LibGfx/TIFFGenerator.py b/Userland/Libraries/LibGfx/TIFFGenerator.py index 062eb992d4..d73e4b3804 100755 --- a/Userland/Libraries/LibGfx/TIFFGenerator.py +++ b/Userland/Libraries/LibGfx/TIFFGenerator.py @@ -132,11 +132,11 @@ known_tags: List[Tag] = [ Tag('266', [TIFFType.UnsignedShort], [1], FillOrder.LeftToRight, "FillOrder", FillOrder), Tag('271', [TIFFType.ASCII], [], None, "Make"), Tag('272', [TIFFType.ASCII], [], None, "Model"), - Tag('273', [TIFFType.UnsignedShort, TIFFType.UnsignedLong], [], None, "StripOffsets", is_required=True), + Tag('273', [TIFFType.UnsignedShort, TIFFType.UnsignedLong], [], None, "StripOffsets", is_required=False), Tag('274', [TIFFType.UnsignedShort], [1], Orientation.Default, "Orientation", Orientation), Tag('277', [TIFFType.UnsignedShort], [1], None, "SamplesPerPixel", is_required=True), Tag('278', [TIFFType.UnsignedShort, TIFFType.UnsignedLong], [1], None, "RowsPerStrip", is_required=False), - Tag('279', [TIFFType.UnsignedShort, TIFFType.UnsignedLong], [], None, "StripByteCounts", is_required=True), + Tag('279', [TIFFType.UnsignedShort, TIFFType.UnsignedLong], [], None, "StripByteCounts", is_required=False), Tag('282', [TIFFType.UnsignedRational], [1], None, "XResolution"), Tag('283', [TIFFType.UnsignedRational], [1], None, "YResolution"), Tag('284', [TIFFType.UnsignedShort], [1], PlanarConfiguration.Chunky, "PlanarConfiguration", PlanarConfiguration),