From 062cf73c0788702253ed9be4622c39af343b3f63 Mon Sep 17 00:00:00 2001 From: Dominik Stadler Date: Sat, 5 Sep 2015 12:57:04 +0000 Subject: [PATCH] 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 --- .../xssf/usermodel/XSSFRichTextString.java | 5 +++++ .../poi/xssf/usermodel/TestXSSFBugs.java | 21 ++++++++++++++++++ test-data/spreadsheet/58315.xlsx | Bin 0 -> 8963 bytes 3 files changed, 26 insertions(+) create mode 100644 test-data/spreadsheet/58315.xlsx 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 0000000000000000000000000000000000000000..0da751ed656f42ed445671241a3db64ae35d1b99 GIT binary patch literal 8963 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 JME_gse*g>(Nz?!U literal 0 HcmV?d00001 -- 2.39.5