Author: centic Date: Sat Dec 30 19:39:36 2023 New Revision: 1915005 URL: http://svn.apache.org/viewvc?rev=1915005&view=rev Log: Bug 66425: Avoid exceptions found via poi-fuzz
Prevent NullPointerException Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=64495 Added: poi/trunk/test-data/document/clusterfuzz-testcase-minimized-POIXWPFFuzzer-6120975439364096.docx Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFNumbering.java poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFNumbering.java Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFNumbering.java URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFNumbering.java?rev=1915005&r1=1915004&r2=1915005&view=diff ============================================================================== --- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFNumbering.java (original) +++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFNumbering.java Sat Dec 30 19:39:36 2023 @@ -97,8 +97,10 @@ public class XWPFNumbering extends POIXM XmlOptions xmlOptions = new XmlOptions(DEFAULT_XML_OPTIONS); xmlOptions.setSaveSyntheticDocumentElement(new QName(CTNumbering.type.getName().getNamespaceURI(), "numbering")); PackagePart part = getPackagePart(); - try (OutputStream out = part.getOutputStream()) { - ctNumbering.save(out, xmlOptions); + if (ctNumbering != null) { + try (OutputStream out = part.getOutputStream()) { + ctNumbering.save(out, xmlOptions); + } } } Modified: poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFNumbering.java URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFNumbering.java?rev=1915005&r1=1915004&r2=1915005&view=diff ============================================================================== --- poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFNumbering.java (original) +++ poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFNumbering.java Sat Dec 30 19:39:36 2023 @@ -18,12 +18,16 @@ package org.apache.poi.xwpf.usermodel; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.IOException; +import java.io.OutputStream; import java.math.BigInteger; +import org.apache.commons.io.output.NullOutputStream; import org.apache.poi.xwpf.XWPFTestDataSamples; import org.junit.jupiter.api.Test; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTAbstractNum; @@ -165,4 +169,18 @@ class TestXWPFNumbering { assertEquals(doc.getNumbering().getAbstractNums().size(), count); } } + + @Test + void testNPE() throws IOException { + try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("clusterfuzz-testcase-minimized-POIXWPFFuzzer-6120975439364096.docx"); + OutputStream out = NullOutputStream.INSTANCE) { + + // settings and numbering are null for this malformed document + assertNull(doc.getNumbering()); + assertNull(doc.getSettings()); + + assertThrows(IllegalStateException.class, () -> + doc.write(out), "Fails because settings are not populated in this malformed document"); + } + } } Added: poi/trunk/test-data/document/clusterfuzz-testcase-minimized-POIXWPFFuzzer-6120975439364096.docx URL: http://svn.apache.org/viewvc/poi/trunk/test-data/document/clusterfuzz-testcase-minimized-POIXWPFFuzzer-6120975439364096.docx?rev=1915005&view=auto ============================================================================== Binary files poi/trunk/test-data/document/clusterfuzz-testcase-minimized-POIXWPFFuzzer-6120975439364096.docx (added) and poi/trunk/test-data/document/clusterfuzz-testcase-minimized-POIXWPFFuzzer-6120975439364096.docx Sat Dec 30 19:39:36 2023 differ --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
