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