Bug 66425: Avoid exceptions found via poi-fuzz

Prevent NullPointerException

Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=64495

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1915005 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Dominik Stadler 2023-12-30 19:39:36 +00:00
parent 94ace1c4b0
commit d54c8f16e6
3 changed files with 22 additions and 2 deletions

View File

@ -97,8 +97,10 @@ public class XWPFNumbering extends POIXMLDocumentPart {
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);
}
}
}

View File

@ -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");
}
}
}