From 877982ea92d741dbc37992b5a5cc80c5c8380796 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Wed, 20 Oct 2010 16:25:24 +0000 Subject: [PATCH] Fix bug #50119 - avoid NPE when XSSFReader comes across chart sheets git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1025630 13f79535-47bb-0310-9956-ffa450edef68 --- src/documentation/content/xdocs/status.xml | 2 +- .../poi/xssf/eventusermodel/XSSFReader.java | 3 ++- .../xssf/eventusermodel/TestXSSFReader.java | 18 ++++++++++++++++++ test-data/spreadsheet/WithChartSheet.xlsx | Bin 0 -> 30333 bytes 4 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 test-data/spreadsheet/WithChartSheet.xlsx diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index 979e81ce54..c27545d3cf 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -34,7 +34,7 @@ - + 50119 - avoid NPE when XSSFReader comes across chart sheets 50075 - avoid NPE in ListLevel.getNumberText() when numberText is null diff --git a/src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFReader.java b/src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFReader.java index 991d6661d3..0994ad8500 100644 --- a/src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFReader.java +++ b/src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFReader.java @@ -177,7 +177,8 @@ public class XSSFReader { //step 1. Map sheet's relationship Id and the corresponding PackagePart sheetMap = new HashMap(); for(PackageRelationship rel : wb.getRelationships()){ - if(rel.getRelationshipType().equals(XSSFRelation.WORKSHEET.getRelation())){ + if(rel.getRelationshipType().equals(XSSFRelation.WORKSHEET.getRelation()) || + rel.getRelationshipType().equals(XSSFRelation.CHARTSHEET.getRelation())){ PackagePartName relName = PackagingURIHelper.createPartName(rel.getTargetURI()); sheetMap.put(rel.getId(), wb.getPackage().getPart(relName)); } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestXSSFReader.java b/src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestXSSFReader.java index 0592fbcc76..11f03dd62d 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestXSSFReader.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestXSSFReader.java @@ -116,4 +116,22 @@ public final class TestXSSFReader extends TestCase { } assertEquals(4, count); } + + + /** + * Iterating over a workbook with chart sheets in it, using the + * XSSFReader method + * @throws Exception + */ + public void test50119() throws Exception { + OPCPackage pkg = XSSFTestDataSamples.openSamplePackage("WithChartSheet.xlsx"); + XSSFReader r = new XSSFReader(pkg); + XSSFReader.SheetIterator it = (XSSFReader.SheetIterator)r.getSheetsData(); + + while(it.hasNext()) + { + InputStream stream = it.next(); + stream.close(); + } + } } diff --git a/test-data/spreadsheet/WithChartSheet.xlsx b/test-data/spreadsheet/WithChartSheet.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..8defbd6cc4b80d9c5ff3807cf47c061bb54b9362 GIT binary patch literal 30333 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 literal 0 HcmV?d00001