From 94ace1c4b0469d1e5909e26d47b8a76491c0b106 Mon Sep 17 00:00:00 2001 From: Dominik Stadler Date: Sat, 30 Dec 2023 19:39:31 +0000 Subject: [PATCH] Bug 66425: Avoid exceptions found via poi-fuzz Prevent NullPointerException Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=64943 git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1915004 13f79535-47bb-0310-9956-ffa450edef68 --- .../hwpf/converter/AbstractWordConverter.java | 4 ++++ .../converter/TestWordToConverterSuite.java | 3 ++- .../converter/TestWordToTextConverter.java | 3 ++- ...nimized-POIHWPFFuzzer-6610789829836800.doc | Bin 0 -> 39249 bytes test-data/spreadsheet/stress.xls | Bin 63488 -> 63488 bytes 5 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 test-data/document/clusterfuzz-testcase-minimized-POIHWPFFuzzer-6610789829836800.doc diff --git a/poi-scratchpad/src/main/java/org/apache/poi/hwpf/converter/AbstractWordConverter.java b/poi-scratchpad/src/main/java/org/apache/poi/hwpf/converter/AbstractWordConverter.java index d6f410d286..186feb2118 100644 --- a/poi-scratchpad/src/main/java/org/apache/poi/hwpf/converter/AbstractWordConverter.java +++ b/poi-scratchpad/src/main/java/org/apache/poi/hwpf/converter/AbstractWordConverter.java @@ -745,6 +745,10 @@ public abstract class AbstractWordConverter { } case FIELD_DROP_DOWN: { Range fieldContent = field.firstSubrange(parentRange); + if (fieldContent == null) { + throw new IllegalStateException("Cannot read field content from field " + field + " and range " + parentRange); + } + CharacterRun cr = fieldContent.getCharacterRun(fieldContent .numCharacterRuns() - 1); String[] values = cr.getDropDownListValues(); diff --git a/poi-scratchpad/src/test/java/org/apache/poi/hwpf/converter/TestWordToConverterSuite.java b/poi-scratchpad/src/test/java/org/apache/poi/hwpf/converter/TestWordToConverterSuite.java index efa007af47..0eb956e88c 100644 --- a/poi-scratchpad/src/test/java/org/apache/poi/hwpf/converter/TestWordToConverterSuite.java +++ b/poi-scratchpad/src/test/java/org/apache/poi/hwpf/converter/TestWordToConverterSuite.java @@ -61,7 +61,8 @@ public class TestWordToConverterSuite { "clusterfuzz-testcase-minimized-POIHWPFFuzzer-4947285593948160.doc", "clusterfuzz-testcase-minimized-POIHWPFFuzzer-5440721166139392.doc", "clusterfuzz-testcase-minimized-POIHWPFFuzzer-5050208641482752.doc", - "clusterfuzz-testcase-minimized-POIHWPFFuzzer-4892412469968896.doc" + "clusterfuzz-testcase-minimized-POIHWPFFuzzer-4892412469968896.doc", + "clusterfuzz-testcase-minimized-POIHWPFFuzzer-6610789829836800.doc" ); public static Stream files() { diff --git a/poi-scratchpad/src/test/java/org/apache/poi/hwpf/converter/TestWordToTextConverter.java b/poi-scratchpad/src/test/java/org/apache/poi/hwpf/converter/TestWordToTextConverter.java index ab9f6d6cd4..cb72d510f5 100644 --- a/poi-scratchpad/src/test/java/org/apache/poi/hwpf/converter/TestWordToTextConverter.java +++ b/poi-scratchpad/src/test/java/org/apache/poi/hwpf/converter/TestWordToTextConverter.java @@ -54,7 +54,8 @@ public class TestWordToTextConverter { "clusterfuzz-testcase-minimized-POIHWPFFuzzer-4947285593948160.doc", "clusterfuzz-testcase-minimized-POIHWPFFuzzer-5440721166139392.doc", "clusterfuzz-testcase-minimized-POIHWPFFuzzer-5050208641482752.doc", - "clusterfuzz-testcase-minimized-POIHWPFFuzzer-4892412469968896.doc" + "clusterfuzz-testcase-minimized-POIHWPFFuzzer-4892412469968896.doc", + "clusterfuzz-testcase-minimized-POIHWPFFuzzer-6610789829836800.doc" ); /** diff --git a/test-data/document/clusterfuzz-testcase-minimized-POIHWPFFuzzer-6610789829836800.doc b/test-data/document/clusterfuzz-testcase-minimized-POIHWPFFuzzer-6610789829836800.doc new file mode 100644 index 0000000000000000000000000000000000000000..85f57dba2c31b1006fae0d3c433d5b4ed5bc79a6 GIT binary patch literal 39249 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 delta 2384 zcmZ9LeNYs27{`CVy8{k5SU4;!X8&-SX@=PxxB^dFDJUoqDKQ`rNr`D1niNYjQc1Fi zUPP;>GBP52Gcpt0-jJlCS4&gF21Q9hoe%_R=%1Qt=(**~9J}1iGqaz4zMt>@*t@!M zXWh87?E%m1tRlgG5hA;$^1jt;tEyM6sTVOK@epnHYzc`A72|t?bm=GQg4y6jQKU#>%LLv4<8BJwNWr1(W6#=KHdrl{UTxtjdFntX^Vc|J_rc&?#No@?pPUQK-jiBK~!kCTCX zC_j0;SVu`G66B+lcOoHe9q)DVoiIMb)%O%&M|d=ACph%p^?aKu;~F>oyJOOQ{{h8d1ni^FR=HpAhyIJ|HiVaJm+ z(wCr4zn3_RW0vW7imo~3m-SS3N|R4h1J4FBcs@gCcs@&!r#1N;`A_@h^Hj}q3+-ak zNIg8a(j?DqhStB^Azz^0Gn#ynoM$!p5+$AWOQQREzDzAVU!h*+uaa{>liMkY=WA5P zvxypbzD~w~rtH9RH1jxb(CC1wG=p6ScGaLN-z5K_CR?a-P*dK*{UqFP9!%7Cf+bHe zzUty1UNZk%0$xvvU{NJg|OdAAtG6!q2OEE7*KX&wN`?n%VOqcGHlrIIk+Z!EOX=WcCr54%Wdv zd%zZ0dKTDv(#@Wav73&3>;+ZX3w9G&I}Eom zIixBE*ezfynSBCwD_GNzs(%WWW$DSX^<P1!g0_=9M+>5H- z0hVLw$+7k1nmzlmn~VHTc6Nd-1Ut;^ORzk!f4JuW*dj~MB3nS&w#?GA%+^zG_WX+7a^z!2RpkiSJz(j~j)E-*s~TOY9|K!q=~-dx zsW5wf!*0cN&zP$8fZaRY!|XU%FDUG9D3X--dy5E*O~d+Y06R4@@o gB@-U^fj>qTdi6d@b6m5Gx``U;$Qd&J{X5k8KZQ>G(*OVf