diff options
author | Dominik Stadler <centic@apache.org> | 2015-09-05 12:57:04 +0000 |
---|---|---|
committer | Dominik Stadler <centic@apache.org> | 2015-09-05 12:57:04 +0000 |
commit | 062cf73c0788702253ed9be4622c39af343b3f63 (patch) | |
tree | 2f6c0cae2369349f98ed4fcba07878760ae760d8 /src/ooxml | |
parent | 7da84c99f2eb406119eb0d63daa41be62d8faa67 (diff) | |
download | poi-062cf73c0788702253ed9be4622c39af343b3f63.tar.gz poi-062cf73c0788702253ed9be4622c39af343b3f63.zip |
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
Diffstat (limited to 'src/ooxml')
-rw-r--r-- | src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRichTextString.java | 5 | ||||
-rw-r--r-- | src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java | 21 |
2 files changed, 26 insertions, 0 deletions
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(); + } } |