From: Dominik Stadler Date: Sat, 5 Sep 2015 12:57:04 +0000 (+0000) Subject: Bug 58315: Avoid NPE for RichTextString without font-details X-Git-Tag: REL_3_13_FINAL~35 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=062cf73c0788702253ed9be4622c39af343b3f63;p=poi.git Bug 58315: Avoid NPE for RichTextString without font-details git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1701382 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRichTextString.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRichTextString.java index a7f9b3a8e3..63f7a3ba8f 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRichTextString.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRichTextString.java @@ -435,6 +435,11 @@ public class XSSFRichTextString implements RichTextString { protected static CTFont toCTFont(CTRPrElt pr){ CTFont ctFont = CTFont.Factory.newInstance(); + // Bug 58315: there are files where there is no pr-entry for a RichTextString + if(pr == null) { + return ctFont; + } + if(pr.sizeOfBArray() > 0) ctFont.addNewB().setVal(pr.getBArray(0).getVal()); if(pr.sizeOfUArray() > 0) ctFont.addNewU().setVal(pr.getUArray(0).getVal()); if(pr.sizeOfIArray() > 0) ctFont.addNewI().setVal(pr.getIArray(0).getVal()); diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java index 566d1d712a..f487726c95 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java @@ -2636,4 +2636,25 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues { wb.close(); } + + + @Test + public void test58315() throws IOException { + Workbook wb = XSSFTestDataSamples.openSampleWorkbook("58315.xlsx"); + Cell cell = wb.getSheetAt(0).getRow(0).getCell(0); + assertNotNull(cell); + StringBuilder tmpCellContent = new StringBuilder(cell.getStringCellValue()); + XSSFRichTextString richText = (XSSFRichTextString) cell.getRichStringCellValue(); + + for (int i = richText.length() - 1; i >= 0; i--) { + Font f = richText.getFontAtIndex(i); + if (f != null && f.getStrikeout()) { + tmpCellContent.deleteCharAt(i); + } + } + String result = tmpCellContent.toString(); + assertEquals("320 350", result); + + wb.close(); + } } diff --git a/test-data/spreadsheet/58315.xlsx b/test-data/spreadsheet/58315.xlsx new file mode 100644 index 0000000000..0da751ed65 Binary files /dev/null and b/test-data/spreadsheet/58315.xlsx differ