From 2b2dd2fb40bf6422e30f8a855882d3a359e6fbb7 Mon Sep 17 00:00:00 2001 From: Harald Kuhr Date: Sat, 7 Mar 2015 21:41:38 +0100 Subject: [PATCH] TMI-107: JPEGSegmentImageInputStream now recovers from EOFException while parsing segments. --- .../jpeg/JPEGSegmentImageInputStream.java | 8 +++- .../plugins/jpeg/JPEGImageReaderTest.java | 41 +++++++++++++++++-- .../jpeg/JPEGSegmentImageInputStreamTest.java | 1 + 3 files changed, 44 insertions(+), 6 deletions(-) diff --git a/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGSegmentImageInputStream.java b/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGSegmentImageInputStream.java index 2a3c0342..ce42f658 100644 --- a/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGSegmentImageInputStream.java +++ b/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGSegmentImageInputStream.java @@ -74,7 +74,9 @@ final class JPEGSegmentImageInputStream extends ImageInputStreamImpl { if (streamPos >= segment.end()) { // Go forward in cache - while (++currentSegment < segments.size()) { + int cachedSegment = currentSegment; + while (++cachedSegment < segments.size()) { + currentSegment = cachedSegment; segment = segments.get(currentSegment); if (streamPos >= segment.start && streamPos < segment.end()) { @@ -157,7 +159,9 @@ final class JPEGSegmentImageInputStream extends ImageInputStreamImpl { } else if (streamPos < segment.start) { // Go back in cache - while (--currentSegment >= 0) { + int cachedSegment = currentSegment; + while (--cachedSegment >= 0) { + currentSegment = cachedSegment; segment = segments.get(currentSegment); if (streamPos >= segment.start && streamPos < segment.end()) { diff --git a/imageio/imageio-jpeg/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReaderTest.java b/imageio/imageio-jpeg/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReaderTest.java index af879364..b9a4e6f6 100644 --- a/imageio/imageio-jpeg/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReaderTest.java +++ b/imageio/imageio-jpeg/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReaderTest.java @@ -417,19 +417,52 @@ public class JPEGImageReaderTest extends ImageReaderAbstractTestCase