From 66363f8d09bacfa0e22e92dab6db185e7be8e1be Mon Sep 17 00:00:00 2001 From: Rolf Howarth Date: Fri, 30 May 2025 14:59:00 +0100 Subject: [PATCH] Fix bounds issue in some v2 PICT files (#1129) x2 and y2 were swapped over, resulting in an "invalid bounds" exception with -ve height on some nonV2Ext images, see for example CatDV==2.0=1=.pict or Picture14.pict Co-authored-by: Harald Kuhr --- .../imageio/plugins/pict/PICTImageReader.java | 2 +- .../plugins/pict/PICTImageReaderTest.java | 19 ++++++++++++++++++ .../test/resources/pict/CatDV==2.0=1=.pict | Bin 0 -> 33974 bytes .../src/test/resources/pict/Picture14.pict | Bin 0 -> 17848 bytes 4 files changed, 20 insertions(+), 1 deletion(-) create mode 100755 imageio/imageio-pict/src/test/resources/pict/CatDV==2.0=1=.pict create mode 100755 imageio/imageio-pict/src/test/resources/pict/Picture14.pict diff --git a/imageio/imageio-pict/src/main/java/com/twelvemonkeys/imageio/plugins/pict/PICTImageReader.java b/imageio/imageio-pict/src/main/java/com/twelvemonkeys/imageio/plugins/pict/PICTImageReader.java index 8dfbfd7d..5ee36c1e 100644 --- a/imageio/imageio-pict/src/main/java/com/twelvemonkeys/imageio/plugins/pict/PICTImageReader.java +++ b/imageio/imageio-pict/src/main/java/com/twelvemonkeys/imageio/plugins/pict/PICTImageReader.java @@ -254,8 +254,8 @@ public final class PICTImageReader extends ImageReaderBase { // the default Mac screen resolution and the image resolution // int y, x, w(?), h (fixed point) - double y2 = PICTUtil.readFixedPoint(pStream); double x2 = PICTUtil.readFixedPoint(pStream); + double y2 = PICTUtil.readFixedPoint(pStream); double w2 = PICTUtil.readFixedPoint(pStream); // ?! double h2 = PICTUtil.readFixedPoint(pStream); diff --git a/imageio/imageio-pict/src/test/java/com/twelvemonkeys/imageio/plugins/pict/PICTImageReaderTest.java b/imageio/imageio-pict/src/test/java/com/twelvemonkeys/imageio/plugins/pict/PICTImageReaderTest.java index e1f84067..4053aa38 100644 --- a/imageio/imageio-pict/src/test/java/com/twelvemonkeys/imageio/plugins/pict/PICTImageReaderTest.java +++ b/imageio/imageio-pict/src/test/java/com/twelvemonkeys/imageio/plugins/pict/PICTImageReaderTest.java @@ -84,6 +84,8 @@ public class PICTImageReaderTest extends ImageReaderAbstractTest$;mmj-3J9A&n_nlK! zUDe&U=dqh`@5HOQd%LSnojRw^*QcsZ)vY$><$vGGEpXcd=Dy^HT%!3yw3AOTIZo#3-iIwL!D!{7Rl=&(=xuVPnLO)oa=g~XYMqchwS&V{Z7sI8`CR# z#a)F#F0Qj)c2|b$<={FsKkTRyV+My3ld;S_#lEbI`{l}gY7TeM6urEc-<$8tz6pO-v<9XneR6yM>>j_2~+O(l1O#WiX`XFm9SIkfB8Qk zy|C*)59zOzVVeBi$ow}oeg+y3@}%gmL+$6NL#*~iCY5?W!rQa_?}J`dk?lEAbzqVr zyJU9CM|J$A$DpI|>4Q(dyADNn!zoSvX4H8Dm3tP-ZBn^QQ0}xUw`gE2{EhQ5Y=+*% z*=~Y_Q9d$Bjten4QzrQ<)yA~5Ew*T{J<&cUO!9rC9Gig@bDZ6`g^KbVvzC$RNU>6m zkN7r~wm2PE}A(JUrl-A37AsE??e2odkLnTBL&jruZEou5JArYLBsq&(a+`Y zGH`T8ag>;RA_g3)-6!VTiICtkBH_gO2)P^P*Mu|^b4^K~TYi?%;RZY;Wy4joAVntT z+OnvtcIYabRO=zqRy?}i`tLB$89~?394Io=&rFf6o4Hm^k@t&UwLVnqcMaTszk3<@ zn|tNbAJ-ykMjfK-C*nq+{<@{Xmr;NsBEFNUdt958FhWRupgp| z?{;jPzDZzR4_}NWPioJ7@df0Fq{}sHrG@^S?PY(N6~`O}gDZVot?vHtc+sxIHV~ z`9as6qf=kcOXz-IJ9O=+e^=0rkT(fO1y>okKd%4ZypHG)-*Km2CqxQ|0^}F~3bvHv;t}8KHa;F+;a>rN9AC~eU$hTRTK02s=(XYxfJhboi zr6~LQ5Mqc(F`o3S$SQ&$0R09>3`tNMWX(($#NB?kL5|;gw|Q?V$K_(N-_IdKO$c4t z;jkLbak;;kWe_Q=RzFzgau2Cc`Q>b}+cl`RRxj2*-d$F@UM%!!2tYZqK~&{>e<92I z{cI37d{p6jw$SZn83c@*8`a%XR)>IozrC&t{UmFx=t71H8ftk*Sc~Z+GCf_P3ozkk zi!v8rH3X6)+{B7pq#~_#T%;mxm0YAE4YmAQsfg)c0x}VYp00|?E5>_3|KZFf`HV2fl4cF>BVBysf z7TpbRiXHMuI|)^R9kKz`8F+PQiV-ctm5~Y7FnlDDw;V=seFI;c_EwXbH8C$q+E~my z5mHVSBtnjL4qlIiPV=l~vdA|m{VzY&nAA^AZ2+c}^H@m4PBO*~(p$uLGPbrMfl)DtLgg{|lE)98n0Tv`ts zG;jATJG?m%cr6(c5de2~o`}FU42uZZ3E_Yk0-UU?#X>mfdVbj-DNSH#ccR}I9?Je!{d6lPUSj{!7j_dGE$%aX2jmS}vyG{bJ2>@arr zSmTR@+|%iw;?ne?`5hz(6?F;Lz71bAbj4kib}lnRuP_w}&*bNUgt?H}!val>?NNZm z+=#u_c_%S~O<`I7Qf3ZgC>~kIWh2^e> zsM3qjfAI4W$X{TWk@%3O^A~`eIo6~LO=N@uvvkdi-8olfE%_2LhG!ys>G0QKEj2ie z&iPOYCEdbR-VbC3LkqKKDtjQk=cX_uYwyEwc03sp=qLxyktFQR3kR4*ZVFyqHDkdH zAJ~}^4nF1haWfVeU=L__hT09Ht*x2ynmIzV_Hs_td-=&cZqYD3RHl-CwK@H`%EWEo zRe3Zmmc^&39KojXz@aesdM`YTe=fs>wfatTL6p)+OjV~FVZts8*#AbBl zN{61V-dg&a8L^ojfZ@*L^EG_VDNjBJd?c}+FOe2TTzJhn=S5jR(&vZI5hvmNMv$i5 zV1E^PQUeLvUS*!Cd8(@YdDWhdcDnW&ccR9mo2vCLc{OT#1-#PE_fX5v+Hp2LC_hw? zu999BJ9g0*(}+xg!*rJtV7h2MuF|SkrstIjprfP%*ANuraxU~#I_$9^N1c3ACEB-7 z%+n!;=1695wK zt@_+)shCfEr=Ey-;&aF?j9xGmWy5AgkEb(EP@%Bh8*0`txOde|JF-&xpg@OeR#m+m z!PvqpGP4*SKX9o}R2{#@tf^=vb&OGaN2rzqPQulrT_`yJW@?1gJ*Sxm=bqFo?feei z=ycuKJ4R74F}(s(LvYO9EgY4D_O1@SuD+5xpAwGWO0P-UGJl6aoHv!WfxvlGDeb(6 z(EFTS1de@6-Q(3=A!&9CJV7yj9ns){ql%h<=bwN^-0cy4Jm~h2K56Guia17a#EMOz zYY6bgWcH5G^BGtZ*QlWO=!&Zd#F{j<7j6*8GoK1VOHsukeqEd4x!S{85}n^FTK-^( zS$27D9?V^;yk2A!5#UqcxtTH1rq?gnS@0N$mv|!wZJY!vAW0_sVuwiN^p^y zlv2q?2tW>MJbcuy3O>Ca2y!A4!h*@c9yEs(_wCT4_W~@()JEbifPrJAeoQ+8w)E$l zFg2rc)?hNraweCY<+V47%*vK`M&fm8c@0B3Yn2N}>>d;)Zr!TI?n=U5g@?qjSE0c< z0BsM;e z|NMv@!D8OT{#^%?(AYcg8(eAqw$^X_+8%Hs{E(@`5U(BTcy~i|YxO)y+X8=P zht=`km;V3IDFT>E<0PDKosuUV`buxgwzjdG&==pR!Am*p5zRDEZfrWUQqIB)>cTH{<$Sp?i6^!-m6emuLc-+*Ic+LT z;<;M-%f$y_7A_a*z^uIHb~C1N#LjJm4BPMta$%igYDgSxDa@~g4NMRH4x1-$PdZM&?O;s(QFcPpN~PeYD*oDzBU)w38xfk_{8t-A65@J5kZXD2qBYW-|;P z#A$d5SI-g}pDA6V#%h?(*iBOqXxkB_N4-_$P@UNpRP7+g;>^CFa<0wqyUxx9dDuU> zC(m{3F3nD~Nt%OfLr9}|5Gj2$kc$@a(8P@p%I~s@I%SPBD|B)aY|)l3It2-M!vV-4 zHfn*g*PUan6jyTO$sW^6PN#WI2|_oTDM9GG3e8uJfCVj_6Ec|~a#;cTG)XAKC{GYB z+Iftm#8_aBc@SD5BxlShgyuzPo+8t^rVSxF+%6F_w!bb6;o$;9F2tujnf7Rm1Q9Fh zQgkR@j$N%^(&kbRq}NK$YmG~l(2z4|rnT}6NvoKcCuw<1Pv=M4z)*H53JB-*Y2XqN zkx?BcY&eNj&YL(`IIg^RAK$sPK|?CCF#vQ-a#qkZWVlNBO|fT1bcKl=STv8K^U$Qu zZ9BmX4WI}R^G$_~>_pNHAr?>`S6bY$QG}>{n<;%k5;c1nPf|J>IooNwHkkvhfHZpq z)!tG{4$A5rXu_b4_3&xeH3%KhxVaXmzvU3t$AmbBksU_iOsibaP+pqn#!uUd5ZT$5 zJ*ul}gxQl-U6ULYHXp*K2~H}jMSos?-HZ*weZv~!7x?V`BYf)lU&{D7w4!!r z?mO<*;ya~r5%6AqpA}qwihAX&sEz#g`RcG*Gaq*<(su^a#cHRnu9`vQnnpV+87Z*i zl56JSP~On@mnI7PmO$XiDs1D;z^b=j98yn?^W!$3?!5RKim#b3hT=Psb(GzVBb0)q zzSZkW?378PD!XB#3Y~WfITrdID-++TN;N=DRu_5hfZg4DW$Z-BMV=IJ)!41=DoLpkW zB}{DNAUFz%k2^GkiPomIF^YJJfY2Qnz~c_|6rjArQ*~BlMuk_LQDHU)vrjiMa~U;eVMc}72+Z6r;-Ili;WBE>!i)+toZ(x1rb#lF zQDYWnRG8rmN1QoPYks^Z&1Te?g&7rQIPepP8#FL;88v2MMrz(w!i!BaD&UEi9y4a? zQWMiEL5+D6L27=ZtYnek!yh}r6FAoylfatrjWm_2rqZP5H_O@%;EBmu-B==-CsvYU z2$j_;oJLluvyCh@cZAgzxm1fI;Ft1z<>=B$vw!L6%F69ac+FOMN{Bv12Z~nenh;x3 zr{<4JS*ZIpY=Rs=@L4%(j^V9>$IMY&HHgwqT#;mJ;?&6L{8aPF{GbE%DbOs&76nq1)$~6nFFBMmDr9-}{MKT%7HJl2 z%OXvp;XFtVP`My0f9JLqt+hzAXj>LZ%{{eNvxWFZlrc^p+7d$3>05jM~_r{33&tWUrrN@ZvesH1P4sjWb^On zt;*J1NX7GS@!ftQdCzZM!gDyoMuek)kg)12(0cw&z`nB9LMowuSMc@=$=ifwCsEY! zEuIE_3FPx{8}?PT6jAB?+laSYMBY~Xo|=8DE*;X;Sw}=#zr4*j(y~S*?>636jq;k~ zc4qc<$L&P&+T-`ubbLHtT#5QEC@F71j=05Cs-?W0cnd0dD{@86rDOTYmHkJL215hX zS>aYC(kkUG!DW?AMDkW*d96iBhXGOl=t4LiLWLDx6&kJ2?;2DfHPG-q!6sC2sgLHg zL&4jRx}hNI3wbpVX@!1IA}X9hB)b%Ea(4VGy0&8{RywyIbz@#scd;Q? zwlQLhrOs%-0_L}$ILbvF8PI~YFC675W7%-XR%2aj* zHf3@5U(;?)*=NTBc3uy6FFV@8B<>w+Dk~eWLc-+**(Vbwam!Cr*&5;Uf^1ib%i@(n z4R3OnJq#h?@va;44CdrF;e$=%;8%BMrEWieYcJ(qyk)=OVEov9o zLOT1#n=t8{yjb))(J$*|_hbl*n86{$SaElE)&Y_R%h6qGehBwPuehtg&~R`l!Asz~ rz3$z7k^Epex=YPG=FFl-D!h2O@U0K?a_bj1(< zA-zYpo2EC!%fvjW364S78nfbajS;0bHT+J|6+tf|tBc$^ zQwH}X+JVn_Qq}W91HqLO;My@QcWrhp*0@DW;J2|S(DUd@9tim1KYZ@d?WXMw@iMUw zYJy`Bw#KgbTw_G3E!McAD}r7`Ru{Rk#x2%3b7PI;b-$RSVJ_CfG1r=ju0%WV8BeNu zUT7e=a*}rNK`;ZL&ldWbyFbW$+LxzcL~7IXV-Lx z~47QJ7^FZ_l%pJqWGJ*B+qgETonAnCp>MXlvSQQD&5^prLP9XEF18F-6f~Y`vbk9bMw_2Ul}ntb zm}{!tkei)uwy9IYEtu#3+;XqP4p%{sT%WDrohdfjm_{riOc&zECfe1^e17bHZe6Q+ z3%Y`&6TyKZ~7N3jmgU`U@GY(=rv5O>aL*kIU{QF{J`yYJBe zKi5Yn0*8}85Bi8!!R|YHw(tp5Y9u}U4ci;7N&lTvIG{3;g-`Y{r*`W%acs<4yE*B= z^lXb};gQ}jr|u71nF}QB6OJVKuE^XOu91t!_F@voeQa!@S$M2nQ)8Oz1gc@|2Q27;K+`uA6lRx+p*zgE=)XP6V)H z{=)#55`dgK17O!&Wq@BK06BFAzzy>@1N<@p$f*_{oz{@tG;cA$uLMAvl8lIrN$L`j z3HHnzod4H}0y%X?33676&767*06xP$mDR2|!k(%6>#J3c?exeUt7c z^z&Exp;;zu&<~FYuhQLBbB_$ZIgtnD4Px-q9x-g=)7x~zX{_;<6sp3kIHnR^JFCOZ zKK|5w%5XU^zL4{SR8nOX<0i}@SC(S+Drt*;fr6}3%FZ_>{?{mipG zvT%;uCbVSh+bWc-+gmMJSLU23T+K!k+!{T*h7L_|$2#jhEi+!3^*SPQC|i=5Lxq26 z^)SoHl0*mznjpu0SaS?77sZNZ*-BwqUZ9^UB#eU0it$WE)-S0*C>X$mx$~?q0@^Ja{ca`~& zC*lp!BNoqwHyTgx4;=B`#6$^cwn?Tb$KC^RW)j($^GH&v0$^0qE&@g9Lr$&0B)pA@ zpd=r!3uu&0?bnv}Tikx7fLz*dG5c|!_oY_&atmL}Iu>nIVc1o0kN9sKy3{j~|GQ4E zl0JlbM(tT@I2VU4BKcV5NYlL1%_-$<5=|3R4ACl!+cOL;vb5Xd{!IH=gs!m+)UCNV zo*A38_cvwCxipR%rxbWgtml++WF{l(tzB*sag_E&7hsne%1>tyuFyTr}urS*|d5w-I#nHhRDnVvsexbjR(4%+p`w#qHBvoFEwUA983X&3!3ZBC> zW1A-5lahU&oH}EtD%%y4ovMsDYo{vTmJWmU(TStfAF3h$k6(Fb1&>(D-viB%J zPPOo)Ryb|;>X`$#lN~l|8N%&l=VWZyA>EMX)o8y?mTej{ox0MTPGdZHB2gy=lJkzZ zc|nWa9wwzS$mbFeR^FW@Ztc*!1k%VsNe(&5nybWV6SvNgG$8T-9BxqUyd3D32~&9lO1j$nIrX^9>3e~+cypUmIX{pcM?kJ zEaLe@#MoRL;#s;_OuUmvvMF%}+YEtjzX!gX$%Nr`d|@Gz>)Y%gbUNP*sTCJ<0g=&? z?M#u;>ZRjLYDO3E;3rurJ3}1Xhm*|`|LQ_BjYA z&1*aW;Y`NJc;0%tF0^@f2wjTo({*X!#(PwkJ6}gX)-z&@IH!1w9!32hGfekm@tR@F zYo^C>(Szr(XI?WU=$!{Yn?+OJh88s_GG%f@n|F7M>SqRQb&&D6VM^ynEOAp9Y!}87 zcc8ETyf4ZKca*5fWbsK)+fH$crzza4e%k|L!OiP2Xkpk;W^nK=1V3Dm6OaRA%)g3C zx9NhJ(pllwlrHJ?X}-Zzx}=MbsbvtI0mk#WU|7+`gCH-1ET=x$y&h@ObquFIN3z#r z8m!`q+-SSi6(S`|F0s=JCrx+K=wbTdS07w7lf(nlj7l&mJt!0C97A7@N;Ed7M%IpK zbcJDK5GkY8osaMIFb_D~O|^FbE+j_C zrBn-F^>0!9(3}g<&dC1Ftiz|`!u2=2-WSYy2hP{b)WzgT_j0;T1e_WD;pLHj)ysov zE|@}cBA}EW_d*xUjo!Lcieybm7Cy%B=B*9zvxAGs z6Mn06M2~@h;S&)kTs|D$@}J-ap7C$`^OJwqUsifQg719te+jUS@N|MLJazD_j&frn I$2-{n0vdX?^8f$< literal 0 HcmV?d00001