From 71903c5dbaf7356426370950a417ce3d264bfef7 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Wed, 9 May 2018 10:57:43 +1000 Subject: [PATCH] Minor cleanup --- .../Jpeg/PdfJsPort/Components/ScanDecoder.cs | 32 ++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/src/ImageSharp/Formats/Jpeg/PdfJsPort/Components/ScanDecoder.cs b/src/ImageSharp/Formats/Jpeg/PdfJsPort/Components/ScanDecoder.cs index af7233bfe8..e9f91ef06c 100644 --- a/src/ImageSharp/Formats/Jpeg/PdfJsPort/Components/ScanDecoder.cs +++ b/src/ImageSharp/Formats/Jpeg/PdfJsPort/Components/ScanDecoder.cs @@ -94,9 +94,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components { if (this.componentsLength == 1) { - int i, j; - int n = this.componentIndex; - PdfJsFrameComponent component = this.components[n]; + PdfJsFrameComponent component = this.components[this.componentIndex]; // Non-interleaved data, we just need to process one block at a time, // in trivial scanline order @@ -110,18 +108,42 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components Span fastAC = fastACTables.Tables.GetRowSpan(component.ACHuffmanTableId); int mcu = 0; - for (j = 0; j < h; j++) + for (int j = 0; j < h; j++) { - for (i = 0; i < w; i++) + for (int i = 0; i < w; i++) { int blockRow = mcu / w; int blockCol = mcu % w; int offset = component.GetBlockBufferOffset(blockRow, blockCol); this.DecodeBlock(component, ref Unsafe.Add(ref blockDataRef, offset), ref dcHuffmanTable, ref acHuffmanTable, fastAC); mcu++; + + // Every data block is an MCU, so countdown the restart interval + if (this.todo-- <= 0) + { + if (this.codeBits < 24) + { + this.GrowBufferUnsafe(); + } + + // If it's NOT a restart, then just bail, so we get corrupt data + // rather than no data + if (!this.IsRestartMarker(this.marker)) + { + return 1; + } + + this.Reset(); + } } } } + else + { + // Interleaved + int i, j, k, x, y; + + } } return 1;