From 11f33741d496aaccb495877ccca4cb13f7fd3fa0 Mon Sep 17 00:00:00 2001 From: Harald Kuhr Date: Thu, 19 Mar 2015 21:30:37 +0100 Subject: [PATCH] TMI-119: Fixed endless loop, trying to read 0 bytes at EOF caused by bogus segment lengths... --- .../plugins/jpeg/JPEGSegmentImageInputStream.java | 3 ++- .../imageio/plugins/jpeg/JPEGImageReaderTest.java | 3 ++- .../broken-adobe-segment-length-beyond-eof.jpg | 13 +++++++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) create mode 100755 imageio/imageio-jpeg/src/test/resources/broken-jpeg/broken-adobe-segment-length-beyond-eof.jpg 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 cdc8db23..4b06c61e 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 @@ -271,7 +271,8 @@ final class JPEGSegmentImageInputStream extends ImageInputStreamImpl { while (total < len) { repositionAsNecessary(); - int count = stream.read(b, off + total, (int) Math.min(len - total, segment.end() - streamPos)); + long bytesLeft = segment.end() - streamPos; // If no more bytes after reposition, we're at EOF + int count = bytesLeft == 0 ? -1 : stream.read(b, off + total, (int) Math.min(len - total, bytesLeft)); if (count == -1) { // EOF 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 9c9eaea5..daf49d15 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 @@ -104,7 +104,8 @@ public class JPEGImageReaderTest extends ImageReaderAbstractTestCaseكrhaQ1cr}8HOιY22#.Tzڑ)/PWҭZ6ѨEIyʾcYcl8k~*AE;턷^aGm,/O֊H8.Óoo/\yVUfHz +G­އ{33f=O凉C(Drq}\:UU!㏇}ӽo//Z}G9wiMw /BKu R8-EG":Et/-w_> vw>b ,^! Q]FٯNeӛ 9pw 9|(G#,it˓]h#$ڿƙlGdKlSO3ɧGD[HϩAKK8Os}w(H8rG/NY\}q=;w O=۽̷"_QONE  +o A-f`dHEpXUy7.GʿY/KA ƆcD;sm2QPc.` e :&ޟIkO/\\8C5ڠd6/&]ߛWW"BY*m~ 3PA"gcuKۂcoQRY Væ!V|\Q!33?"lzM>{9ӏYA>^Tm:C<:7RmN5O+\iP$/9cZX r1F) =iޙ-/\GRUطߗlS,s&/3xb%__R;?lY1U HBXz6'3 Pvhh3 ߏC6b_y [ +'vt3d hu?7,Tpmpc Q~' xFRD|!'Zw־o:c_Kkʻ}Vb??<ޟYijf~,5 yu ZS0[rK - KV/ǫ'>{gSo,?T}oOW<39OqpC  7N// ֭I}qP.8֔ e1 k|^\?? \ No newline at end of file