From e96c9e17c0a9d0071c65423009a5a8c150b05941 Mon Sep 17 00:00:00 2001 From: Dominik Stadler Date: Sat, 14 Feb 2026 18:25:36 +0100 Subject: [PATCH] Avoid NPE with malformed EscherAggregate --- .../poi/hssf/record/EscherAggregate.java | 3 +++ .../apache/poi/hssf/dev/TestBiffViewer.java | 1 + .../apache/poi/hssf/dev/TestRecordLister.java | 1 + .../poi/hssf/model/TestDrawingAggregate.java | 3 ++- ...9f845e73447b092477d0472402a5baea4b8c9f.xls | Bin 0 -> 47616 bytes test-data/spreadsheet/stress.xls | Bin 78848 -> 79360 bytes 6 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 test-data/spreadsheet/cf9f845e73447b092477d0472402a5baea4b8c9f.xls diff --git a/poi/src/main/java/org/apache/poi/hssf/record/EscherAggregate.java b/poi/src/main/java/org/apache/poi/hssf/record/EscherAggregate.java index 6a0414c31c..fc6d8270b9 100644 --- a/poi/src/main/java/org/apache/poi/hssf/record/EscherAggregate.java +++ b/poi/src/main/java/org/apache/poi/hssf/record/EscherAggregate.java @@ -292,6 +292,9 @@ public final class EscherAggregate extends AbstractEscherHolderRecord { // Write the matching OBJ record Record obj = shapeToObj.get(shapes.get(i)); + if (obj == null) { + throw new IllegalStateException("Cannot serialize EscherAggregate with missing shape-object"); + } pos += obj.serialize(pos, data); isFirst = false; diff --git a/poi/src/test/java/org/apache/poi/hssf/dev/TestBiffViewer.java b/poi/src/test/java/org/apache/poi/hssf/dev/TestBiffViewer.java index 33f28455a8..9d71b5fccd 100644 --- a/poi/src/test/java/org/apache/poi/hssf/dev/TestBiffViewer.java +++ b/poi/src/test/java/org/apache/poi/hssf/dev/TestBiffViewer.java @@ -49,6 +49,7 @@ class TestBiffViewer extends BaseTestIteratingXLS { excludes.put("clusterfuzz-testcase-minimized-POIHSSFFuzzer-6483562584932352.xls", IndexOutOfBoundsException.class); excludes.put("clusterfuzz-testcase-minimized-POIHSSFFuzzer-5816431116615680.xls", RecordFormatException.class); excludes.put("clusterfuzz-testcase-minimized-POIHSSFFuzzer-4734163573080064.xls", IndexOutOfBoundsException.class); + excludes.put("cf9f845e73447b092477d0472402a5baea4b8c9f.xls", RecordFormatException.class); return excludes; } diff --git a/poi/src/test/java/org/apache/poi/hssf/dev/TestRecordLister.java b/poi/src/test/java/org/apache/poi/hssf/dev/TestRecordLister.java index eab59c339f..033c201dae 100644 --- a/poi/src/test/java/org/apache/poi/hssf/dev/TestRecordLister.java +++ b/poi/src/test/java/org/apache/poi/hssf/dev/TestRecordLister.java @@ -52,6 +52,7 @@ class TestRecordLister extends BaseTestIteratingXLS { excludes.put("clusterfuzz-testcase-minimized-POIHSSFFuzzer-6483562584932352.xls", RecordFormatException.class); excludes.put("clusterfuzz-testcase-minimized-POIHSSFFuzzer-5816431116615680.xls", RecordFormatException.class); excludes.put("clusterfuzz-testcase-minimized-POIHSSFFuzzer-4734163573080064.xls", IndexOutOfBoundsException.class); + excludes.put("cf9f845e73447b092477d0472402a5baea4b8c9f.xls", RecordFormatException.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 146c69a568..f326f17b07 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,8 @@ class TestDrawingAggregate { filter(file -> !file.getName().equals("clusterfuzz-testcase-minimized-POIHSSFFuzzer-5285517825277952.xls") && !file.getName().equals("clusterfuzz-testcase-minimized-POIHSSFFuzzer-4977868385681408.xls") && - !file.getName().equals("crash-e329fca9087fe21bca4a80c8bc472a661c98d860.xls")). + !file.getName().equals("crash-e329fca9087fe21bca4a80c8bc472a661c98d860.xls") && + !file.getName().equals("cf9f845e73447b092477d0472402a5baea4b8c9f.xls")). map(Arguments::of); } diff --git a/test-data/spreadsheet/cf9f845e73447b092477d0472402a5baea4b8c9f.xls b/test-data/spreadsheet/cf9f845e73447b092477d0472402a5baea4b8c9f.xls new file mode 100644 index 0000000000000000000000000000000000000000..6bbcc15bb7146c75d9cdb3dcc8be055de31701cc GIT binary patch literal 47616 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 KLw*+#{Qn0#bAB%X literal 0 HcmV?d00001 diff --git a/test-data/spreadsheet/stress.xls b/test-data/spreadsheet/stress.xls index a6db95bc78a81a31b14ffa1c34dce9eef4abeec0..feaeaa201d56b5b58e6d834a7c3bef0b691a0303 100644 GIT binary patch delta 3150 zcmZ9Oe^Aq99LJw$znF7ulV1arF$`4LlraWlpa?1WJ0UTrqO#!}GeFz$g07Og?7H*F z>!N%r_42N(KkTlw-8s8F`lmlS|4{oOq)}N}npv5dmZJ1|o_&y>FC6>uyuYvS>+|_O zdv4HwMbm#x^O7s|HG*FjLiQh9@L`I!jO3CdgES>4ekXX5Pf|2)N-1A`*F@1 zNJDRXXlGAkM|bRbVj&;s2TvIXw6{|Tsfuq*t*@i@_@Pxn+wLktVmqUuz}8qtDAZHh zzRkC-%2N^YmU}$jpv&j>c)eR)9;~IKOm7`Z#NG~NIDuP!+>ZqCUtS|AAjy9z1 zz6Wmwzn)3Xz-w|vVWkH)xl+Ljb^})$SmixfX-N?|i}&?OmOjcY6-f5c|6BSfx4giw z8K8Y1)sigIo4A)s=TQ^az+*zne`DPanxF8S=@Qsa!{knA`A#H`TIgFU^Jh2!zspKK zXTfw@Out|Q>C{2LWG8qz$1d?Q%q$sDM%a8PzOV2;ow%A(%}^)Nqn> z;eFzp0s9ZvF0jKHbUHoHPD1g0jTXIR(MuM+WZ|1>C8NxeDJ)JXzHiWCkSqqtVvsCT zh2>k;pR^q0mhaHQ&zqG@Jdshd7$r-puv}!j-h*alJ%%0(FYpPbU|1npD->3K znytiuY^B6jDp;>zry}dcW}EFWff2(h4EI79PQ}nCS$zsC{5^pQOvqMCY_)=|5v&>6 z8f<1NfC(%Z&d0DC!tgW<7f99x3Tv&frXgD^v9$_zp>kMRhZBejm1zU{lT5M*U0~3^B_!x%E zAq+b(TqjxADXe~Bbt3DRSigc@FW9-ruE%Dl`2_PY+<@U7K0zsl8zt*Tg|$^!UC6dd zY^#EW{~+OGrVQCl*zDP2n81zUW(<$;upGlJ7!DWHt{M-9ZBnZ?MXP{lRe@|^qE!i4 zD=`dCwBn%`!}esD7%qXoIP9>4w(*z7<4)>R8{vPxI`Hdn#>Ba)14R7K=43i`(}@Fo&*drXmWDj(@4n~voO|zq zfjQm4HQh3xw|S(D)< z^I+T!17l_3Q|78l?haqx-Qfwp{bV&Cy3>7B7h=`gaQBg&TAz;{XRS1tNE&l4V;_1L z8{NuS$jMk^3u7PK8N1!Z*k)~b;^`)yJXxQr?B-co!RfO&RMneNH5tE3bxg-5b5_5{ zu{bu_pSH3}&-853wR)Y(`C|C>-nJ9NI(~Lo!}ppOmzI{Izo#PyHT*Sxsz(<&tK*+& zBBu?!%n)g|@B*ID$EB9DKHe8OY2}A$f2LJ)oHR#FHvWdj@)=Do(1ViG4t7y|Was(( zb1`ct%_U(=rMN7%$oN8Z$@o$XQ@FpvI=!;4jMhtwo@vN(Ma-n~HGD$MQTNqFAxSt1NQg4)!%HCY8km%b2uGi>Z4p2`Y%Z(&JNS(0FRRa(9i=kK*xR2DkR)c!pz zR+YsHOOlf;KL{Vi%3hLH7Mo)E5f+=uVuR&5Y57UKLg9|SqZE~ejyUb*XK~5NH}Y9w zN~hO;%;fH%9u`8%OS94ku?!;Ghj$UGhh(#5W!#)U`SOJim9qlsw|kT zfZ&3(S^>8J&PkXIxOEvuoZ0-0CTIh#RCQIxbX6%`DVVLI*|lsz+|1$m7CYbr=*r6_ zm+ zPQXJ1gZBZ}sH$pWs&*+=Zp`k2;DWSz0BZr~B+LNZ4d~3HDlcH2s;VxgYL8NtiP=36 z^pL=k1-KV*M8a&qdcbj6wH9!ns%l?M)qbTa2ebPj@aB^>7w}=gS_#(yJ_6WJFqj9} zpsH$!scKZJ@-f>8!9{8H0X6~Nm9PNtQNTPORTTm@tE!q~stzbs_ha?|1Op_n6alsX zz9r#$z{db5WR)MVRaMm*Q`M$a1u)wNfxm!vTZ#eOqg4e|wE^&8w2EM`1h7L@)e%$G zsZ^C>wsUzl;xDBC#qSsKa&2M>W0f>BP?y!>5cL6`BANm`(dfCpW8u>?(|jmXXBPtj Vev1!_qs9CM&GGEWd@L~yK