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]

Reply via email to