diff --git a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/OldJpegTiffCompression.cs b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/OldJpegTiffCompression.cs index e6ddf95708..e57035a5a6 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/OldJpegTiffCompression.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/OldJpegTiffCompression.cs @@ -34,9 +34,14 @@ internal sealed class OldJpegTiffCompression : TiffBaseDecompressor protected override void Decompress(BufferedReadStream stream, int byteCount, int stripHeight, Span buffer, CancellationToken cancellationToken) { + long stripOffset = stream.Position; stream.Position = this.startOfImageMarker; this.DecodeJpegData(stream, buffer, cancellationToken); + + // Setting the stream position to the expected position. + // This is a workaround for some images having set the stripBytesCount not equal to the compressed jpeg data. + stream.Position = stripOffset + byteCount; } private void DecodeJpegData(BufferedReadStream stream, Span buffer, CancellationToken cancellationToken) diff --git a/tests/ImageSharp.Tests/Formats/Tiff/TiffDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Tiff/TiffDecoderTests.cs index 74b699c4b8..461e817dc9 100644 --- a/tests/ImageSharp.Tests/Formats/Tiff/TiffDecoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Tiff/TiffDecoderTests.cs @@ -666,6 +666,8 @@ public class TiffDecoderTests : TiffDecoderBaseTester [Theory] [WithFile(RgbOldJpegCompressed, PixelTypes.Rgba32)] + [WithFile(RgbOldJpegCompressed2, PixelTypes.Rgba32)] + [WithFile(RgbOldJpegCompressed3, PixelTypes.Rgba32)] [WithFile(YCbCrOldJpegCompressed, PixelTypes.Rgba32)] public void TiffDecoder_CanDecode_OldJpegCompressed(TestImageProvider provider) where TPixel : unmanaged, IPixel diff --git a/tests/ImageSharp.Tests/TestImages.cs b/tests/ImageSharp.Tests/TestImages.cs index 9d017d5062..de94f2b2f7 100644 --- a/tests/ImageSharp.Tests/TestImages.cs +++ b/tests/ImageSharp.Tests/TestImages.cs @@ -796,6 +796,8 @@ public static class TestImages public const string RgbJpegCompressed = "Tiff/rgb_jpegcompression.tiff"; public const string RgbJpegCompressed2 = "Tiff/twain-rgb-jpeg-with-bogus-ycbcr-subsampling.tiff"; public const string RgbOldJpegCompressed = "Tiff/OldJpegCompression.tiff"; + public const string RgbOldJpegCompressed2 = "Tiff/OldJpegCompression2.tiff"; + public const string RgbOldJpegCompressed3 = "Tiff/OldJpegCompression3.tiff"; public const string YCbCrOldJpegCompressed = "Tiff/YCbCrOldJpegCompressed.tiff"; public const string RgbWithStripsJpegCompressed = "Tiff/rgb_jpegcompressed_stripped.tiff"; public const string RgbJpegCompressedNoJpegTable = "Tiff/rgb_jpegcompressed_nojpegtable.tiff"; diff --git a/tests/Images/Input/Tiff/OldJpegCompression2.tiff b/tests/Images/Input/Tiff/OldJpegCompression2.tiff new file mode 100644 index 0000000000..1df25125db --- /dev/null +++ b/tests/Images/Input/Tiff/OldJpegCompression2.tiff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8f722bc322b9a7621d1d858bec36ea78d31b85221f314a2b9872d3af91d600a +size 5052 diff --git a/tests/Images/Input/Tiff/OldJpegCompression3.tiff b/tests/Images/Input/Tiff/OldJpegCompression3.tiff new file mode 100644 index 0000000000..38dce9d501 --- /dev/null +++ b/tests/Images/Input/Tiff/OldJpegCompression3.tiff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b2b73290a40c49a4a29e51ad53dadea65c1ceafc6a5384430f7092d613830db +size 1390339