From 8507fdf3714a9ab9ab83de1293a0015975d370e3 Mon Sep 17 00:00:00 2001 From: Dominik Stadler Date: Sat, 30 Dec 2023 11:11:42 +0000 Subject: [PATCH] Bug 66425: Avoid exceptions found via poi-fuzz Prevent ClassCastException Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=63504 git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1914991 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/hssf/usermodel/HSSFShapeFactory.java | 6 +++++- .../poi/hssf/dev/TestBiffDrawingToXml.java | 1 + .../poi/hssf/model/TestDrawingAggregate.java | 4 +++- ...nimized-POIHSSFFuzzer-4977868385681408.xls | Bin 0 -> 47616 bytes test-data/spreadsheet/stress.xls | Bin 62464 -> 62976 bytes 5 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 test-data/spreadsheet/clusterfuzz-testcase-minimized-POIHSSFFuzzer-4977868385681408.xls diff --git a/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFShapeFactory.java b/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFShapeFactory.java index 080938367b..0dc114ac67 100644 --- a/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFShapeFactory.java +++ b/poi/src/main/java/org/apache/poi/hssf/usermodel/HSSFShapeFactory.java @@ -57,7 +57,11 @@ public class HSSFShapeFactory { } EscherClientDataRecord clientData = ((EscherContainerRecord) child).getChildById(EscherClientDataRecord.RECORD_ID); if (null != clientData) { - obj = (ObjRecord) agg.getShapeToObjMapping().get(clientData); + Record record = agg.getShapeToObjMapping().get(clientData); + if (!(record instanceof ObjRecord)) { + throw new IllegalArgumentException("Had unexpected type of clientData: " + (record == null ? "" : record.getClass())); + } + obj = (ObjRecord) record; } HSSFShapeGroup group = new HSSFShapeGroup(container, obj); List children = container.getChildContainers(); diff --git a/poi/src/test/java/org/apache/poi/hssf/dev/TestBiffDrawingToXml.java b/poi/src/test/java/org/apache/poi/hssf/dev/TestBiffDrawingToXml.java index b9abe815f4..f7af364978 100644 --- a/poi/src/test/java/org/apache/poi/hssf/dev/TestBiffDrawingToXml.java +++ b/poi/src/test/java/org/apache/poi/hssf/dev/TestBiffDrawingToXml.java @@ -57,6 +57,7 @@ class TestBiffDrawingToXml extends BaseTestIteratingXLS { excludes.put("clusterfuzz-testcase-minimized-POIHSSFFuzzer-5285517825277952.xls", IllegalArgumentException.class); excludes.put("clusterfuzz-testcase-minimized-POIHSSFFuzzer-5436547081830400.xls", IllegalArgumentException.class); excludes.put("clusterfuzz-testcase-minimized-POIHSSFFuzzer-5889658057523200.xls", IndexOutOfBoundsException.class); + excludes.put("clusterfuzz-testcase-minimized-POIHSSFFuzzer-4977868385681408.xls", IllegalArgumentException.class); return excludes; } diff --git a/poi/src/test/java/org/apache/poi/hssf/model/TestDrawingAggregate.java b/poi/src/test/java/org/apache/poi/hssf/model/TestDrawingAggregate.java index e21e359767..12854be920 100644 --- a/poi/src/test/java/org/apache/poi/hssf/model/TestDrawingAggregate.java +++ b/poi/src/test/java/org/apache/poi/hssf/model/TestDrawingAggregate.java @@ -138,7 +138,9 @@ class TestDrawingAggregate { File[] files = testData.listFiles((dir, name) -> name.endsWith(".xls")); assertNotNull(files, "Need to find files in test-data path, had path: " + testData); return Stream.of(files). - filter(file -> !file.getName().equals("clusterfuzz-testcase-minimized-POIHSSFFuzzer-5285517825277952.xls")). + filter(file -> + !file.getName().equals("clusterfuzz-testcase-minimized-POIHSSFFuzzer-5285517825277952.xls") && + !file.getName().equals("clusterfuzz-testcase-minimized-POIHSSFFuzzer-4977868385681408.xls")). map(Arguments::of); } diff --git a/test-data/spreadsheet/clusterfuzz-testcase-minimized-POIHSSFFuzzer-4977868385681408.xls b/test-data/spreadsheet/clusterfuzz-testcase-minimized-POIHSSFFuzzer-4977868385681408.xls new file mode 100644 index 0000000000000000000000000000000000000000..2240cb18467c879ddff5f020fd0a811ea1b76e3d GIT binary patch literal 47616 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 literal 0 HcmV?d00001 diff --git a/test-data/spreadsheet/stress.xls b/test-data/spreadsheet/stress.xls index 43e8f6950df06c0b99b5101fae617ea2a07f706a..4a146faa1f53de54d33e403d1daa69b1fe411a16 100644 GIT binary patch delta 2963 zcmZ9NYfzL`7{|}qU6yTKd=b`2@U8q{GtR033+yfkB8nyk1_~;819Wzz^^%}sd092H ziy8EEAw$Ztn|4v(Zkkz{q?vc|R*E_)f;q~EKG~E#@8Ll`haH~b{LgQH|8w>-gxjs* z>(;u&s9Hup(TpwJmI>D03o!Wa_U+rh$#QEeXU?mcHFr++ zY8K7rAApsvwGlQuW52o}M-#<8+~p*{{vG>heo*;#*_jAe6;nVH-8bKgG^%m2j- zncHz}7S65}$CY`6u9XE>QMlq3JCashb>%kvYtS7kg7sxpWN=G9H#dC_BHi5d-A6w6 zgLi~(ey`BYh0yrp&|uyp27TDiVt9<zPeI=nPhdVh!!DkYMrX7$^NiKFw;Nv_JHFQO_^^q4NiDLHxwM=eZ0X`W*V zIu?_|B{^J@!~Epjy^Hy-#<8d2sBm0I$1~*UDLHydj-HZ36OJX2eabw?D9eq5Zrkqk*pD5!ZPOSG(~G=E3Wj zZ$|e=YoNHodSVB5u~5*e^S2??>fw#h(CX1P(Eg*ef4p^o)QrEf*y7nGrDU|KR{`VY^U}h_Zm>3@FZY;ry7`bcsz@*bKpbLTmmVSflCE28;GNh1qm~yvus<3(AH`(qW1;M@Y94 znRNV1 z*S@CgG0HYy(SzSmHd=CyR-Adl`7N<|5}T*6V+6Z{*fG>KxJ}n~Qua7yrEPlfJIeAU zXTIVr5YAo17D#M?!j2W}_r#8+u2$^dP1zHaIj`!$A1Eu7oP~dI=@wO=TkNLf|8 z9^6OSB*{5Rah3|_equ`{wp3xu1p6zoWz=;8`wvhynX>o}J@^}CQzYjU#W__t4-z|7 zVy7zXG{GJsb{cgxby*h;}3Bet@OHJYwf zaG3X39n{%UwqFleUHCsG8_DpQjeZ*x-i(EbH(icB`v(niWc<#dpUn;7n}72~u%L65 MrM}I$)oHi>53T4nmH+?% delta 2694 zcmZ9O3rv+&9Kg@H4>T)UHeU_uh1-6VRD zk@~lXg+%tEEK0s!8qqtHC}{)5yUA-)5t$2Dn{x{~_wZ+M4tM;w`}=<9_y6wY-VM)$ z*)wK77#XyO;E$bUCQ~pL>w!c*yBX{`|V&ezvqY2q;9L+DF)CvC< zEQ#t0yi@Gn%P*Vx!#VG{g;m=V&QqdM&B*92 zpbNX$+zIL{7#)8ZCT%PC{^K|9bHhkE?CV=jAA{CDoo<6ZKDQt4*Xa(3;BzPB_Uo(y z5BP}#PJYmL+>e;}@m7xy~(6@PyB;rw9{UI6#Q$Zl)|NR0q&*v~s? zB}AN`Yuq6{7#yjb7fUg^78Mg;FC#H1=X6L~4X! zBXPh%_d(%+gU$Y3LZ!wc(Rdn;48%|m^bF|q8Mwvgepq%s{{}{Z3ZnWe^E3WS=7e%?8@BTRc2Sq!q85$1jm*=nh|T4~0L z=KJWzN^Y#;#tHWWbmMT>6yN_LvNgz7j52pCvb9okt-7R?{g z&6eD3#my1!Pw3|0uJmh6`x)70WHr~A`xj)nQZrX+=85L7=;ldop5o>U_cwI&an}^z z--WCI*@|)IK7*`KY8EQZBGEjHZjs~`DQ>ZFyU{JiU2Wq``yJUM$h_m*-95-kq-KfI zEEUZ^&@GkRQpGJ3?w{zE&F;U>v~$R|%rL`yy^OZsh&9_H2}$IqNMxnQ44IRmkUMD$ iSaUqDAu7&GVX0*icqaeh|FBfutTSa_Hg4baGye||`4$!c