TMI-119: Fixed endless loop, trying to read 0 bytes at EOF caused by bogus segment lengths...

This commit is contained in:
Harald Kuhr 2015-03-19 21:30:37 +01:00
parent 4839c61f5c
commit 11f33741d4
3 changed files with 17 additions and 2 deletions

View File

@ -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

View File

@ -104,7 +104,8 @@ public class JPEGImageReaderTest extends ImageReaderAbstractTestCase<JPEGImageRe
new TestData(getClassLoaderResource("/broken-jpeg/broken-adobe-marker-bad-length.jpg"), new Dimension(1800, 1200)), // Unreadable, segment lengths are wrong
new TestData(getClassLoaderResource("/broken-jpeg/broken-invalid-adobe-ycc-gray.jpg"), new Dimension(11, 440)), // Image readable, broken metadata (fixable?)
new TestData(getClassLoaderResource("/broken-jpeg/broken-no-sof-ascii-transfer-mode.jpg"), new Dimension(-1, -1)), // Unreadable, can't find SOFn marker
new TestData(getClassLoaderResource("/broken-jpeg/broken-sos-before-sof.jpg"), new Dimension(-1, -1)) // Unreadable, can't find SOFn marker
new TestData(getClassLoaderResource("/broken-jpeg/broken-sos-before-sof.jpg"), new Dimension(-1, -1)), // Unreadable, can't find SOFn marker
new TestData(getClassLoaderResource("/broken-jpeg/broken-adobe-segment-length-beyond-eof.jpg"), new Dimension(-1, -1)) // Unreadable, no EOI
);
// More test data in specific tests below

View File

@ -0,0 +1,13 @@
ÿØÿî Adobe d€ ÿÛ „   

     #"""#'''''''''' 
   !! !!''''''''''ÿÀ  5 )" ÿÄ¢   
   
 s !1AQa"q<>2¡±B#ÁRÑá3bð$rñ%C4S¢²csÂ5D'“£³6TdtÃÒâ
„”EF¤´VÓU(òãóÄÔäôeu…•¥µÅÕåõfv†¦¶ÆÖæö7GWgw‡—§·Ç×ç÷8HXhxˆ˜¨¸ÈØèø)9IYiy‰™©¹ÉÙéù*:JZjzŠšªºÊÚêú m !1AQa"q<>2¡±ðÁÑá#BRbrñ3$4CS%¢c²ÂsÒ5âDƒT“
&6E'dtU7ò£³Ã()Óã󄔤´ÄÔäôeu…•¥µÅÕåõFVfv†¦¶ÆÖæöGWgw‡—§·Ç×ç÷8HXhxˆ˜¨¸ÈØèø9IYiy‰™©¹ÉÙéù*:JZjzŠšªºÊÚêúÿÚ   ? áÚF“}­êiš|f[™Ø*/aâÄö¾z#@òO—¼·e žÝ.æ0g½Çê´"Zxô¨È?åF<C3A5><C2A7>|ˆVoB¦b¡Õ”òT*ƒ¸Éǘtëûý$ 2x£Ä$6Å<E28093>&b*¥˜u>Ùƒ©Èrê±haªQ1cûÒr}8¡ÜH¢OŸÎ¹“Y2œ2È#.ØýÖßTæzÑÚ)åí/Pº<50>W»Ò­Z´6ñ¢Ñ¨ÄêŠøEI«yʾcYcÙlî<6C>8ýk~*êA¦ñ<C2A6>E;í„·^aóG—­m,/­OÖŠñ¶H<C2B6>8<EFBFBD>.Óo¿Žo/\yŽûV“U¿±fH˜
¬<EFBFBD>èG­އ{3´à3f=¡<11>O凉âC(¿Drqú}\®îÜÌà:UþòUÃ!üã<C3BC>‡}¹Õ<SÌ~_¾òέ6•~œdŒÕ³¡û.¾Ç
sÐ?šº$—”P£5îŸ"˜åž©‰Ër‰¸<E280B0>èÝ3ÏÙgçcù_Ípo|ÿ âààâîâëÜåVü[>¿ƒ‡<E280A1>‡ÝÓ½ôo/´Í/ÊZ}œÓGª9˜wi¥M”w®Ù –êøÜÛ/ªBKÖu R8ú-EG":áEŸt/¨Ùꙣ•-âw•_<E280A2>> ví„w>b½ž ,^éî! óQ—FÙ¯ÇÙíNÒÔeÓÇ æ9¥<39>pÔw<C394>|˜(ÏGŠ#,å<dã<02>ª_Å;÷윧™&¹¼†þÚËž<C38B>nÖu¨
$¨«Èb)Û'<27>5m>itË“]¨hî#$¨Ú¿Æ™°óÔlßG¹<47>dK°ÍlªS¡ý¾¿O3ɧéGD»[ÈÁà¼èHëí™úþÂÏ©†A¦ÃàKKš8°ÄO÷sÓ}w(<28>¬Hñ8šÑðr‰ÊG/NY\}qÌ=;wì OõÝ=­ü©©Û½Ì·­" _Q½ONE Ÿ‹²øçÿ
Ÿùo·ÿ ƒÏAØ-æ£f`ÔdHEÂpX­ÀƒUy7.GâùÊ¿åY/ùðKšAâÒ ÃÆ†¬cã†òDÊ;Õs<C395>÷mùÂ2<C382>Q„½Pc.ø` eèÿ :&ÞŸ¢IkæO/Ú\\8ºˆÇÁ£CÄ5Ú ùd6/&]ß”Wœ­âW"BåY˜¯*m<6D>ÉÝ~ 3P¹Óð ìA"£·ígcuÒêKÛ©coQRYË© ë™íV»³²äæÉ!V|\Qæ!33Çû?"lzM>{9ˆ‰Ó<E280B0>YåÇA>ïÐ^TÖˆm­:ÏC<‡ì:7„Rµ£m¾N5O+Û\iöúP$ê/9§cð€´æõ¥íˆZÜØùX r1¢FäÑ) =iÞ™-¶<>/”\GR¼—÷ÊU€Ø·ß—ö¯löŽ—S¥,s†Ë&/à3œxb%__Râè;?lYòãœ1ÉU â°ÒHBXzº6<C2BA>'×ç3 ¤”ÏPv‰Íhh3ƒÿ ÊÁÔß<7F>÷ä¿óCÏ6Éb¾_Ñåy êß[˜
'vˆt­3Œd† hÀuƒ?7,ãTpðmp‰„cÁüÿ Q<>~—'‡ xFRðD|!’÷à'ˆËú»û¼ZwÖ¾½oõ:ýcÔ_K<5F>kÊ»}<7D>ó°ù<C2B0>þV‡øb?­ˆ½?é<ÞŸöYijfÛ~,5áÿ yüuÇÿ Z÷þSô0Ë[ÝrëìëøKÕÿ -ÿ KV/«ˆÍÇ«'§ë>{©ôäßÎgÎßSoª,?Tâ}o©—çOÚçÈW<C388><3Î9²½Oç°‰qpCëâüýµÿ ÿ 7«N/«/Õõÿ Ö­ÐþóñIޝê}q¹P.Ü8Ö”ÿ e€1¹²Ã×ôÿ k³ßÇé|^\?«‡ô?ÿÙ

After

Width:  |  Height:  |  Size: 2.0 KiB