diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFRun.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFRun.java index 9234d1850..d93e54f27 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFRun.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFRun.java @@ -356,8 +356,9 @@ public class XWPFRun implements ISDTContents, IRunElement{ */ public UnderlinePatterns getUnderline() { CTRPr pr = run.getRPr(); - return (pr != null && pr.isSetU()) ? UnderlinePatterns.valueOf(pr - .getU().getVal().intValue()) : UnderlinePatterns.NONE; + return (pr != null && pr.isSetU() && pr.getU().getVal() != null) + ? UnderlinePatterns.valueOf(pr.getU().getVal().intValue()) + : UnderlinePatterns.NONE; } /** diff --git a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFBugs.java b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFBugs.java index a40910df6..bded4e48c 100644 --- a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFBugs.java +++ b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFBugs.java @@ -16,8 +16,11 @@ ==================================================================== */ package org.apache.poi.xwpf.usermodel; -import static org.junit.Assert.assertEquals; +import static org.junit.Assert.*; +import java.io.IOException; + +import org.apache.poi.xwpf.XWPFTestDataSamples; import org.apache.poi.xwpf.usermodel.XWPFRun.FontCharRange; import org.junit.Test; @@ -48,4 +51,30 @@ public class TestXWPFBugs { assertEquals(run.getFontFamily(FontCharRange.hAnsi), "Arial"); } + + @Test + public void bug57312_NullPointException() throws IOException { + XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("57312.docx"); + assertNotNull(doc); + + for( IBodyElement bodyElement : doc.getBodyElements()){ + BodyElementType elementType = bodyElement.getElementType(); + + if(elementType == BodyElementType.PARAGRAPH) { + XWPFParagraph paragraph = (XWPFParagraph) bodyElement; + + for (IRunElement iRunElem : paragraph.getIRuns()){ + + if (iRunElem instanceof XWPFRun){ + XWPFRun runElement = (XWPFRun) iRunElem; + + UnderlinePatterns underline = runElement.getUnderline(); + assertNotNull(underline); + + //System.out.println("Found: " + underline + ": " + runElement.getText(0)); + } + } + } + } + } } diff --git a/test-data/document/57312.docx b/test-data/document/57312.docx new file mode 100644 index 000000000..322759739 Binary files /dev/null and b/test-data/document/57312.docx differ