diff options
author | Dominik Stadler <centic@apache.org> | 2017-04-06 21:49:53 +0000 |
---|---|---|
committer | Dominik Stadler <centic@apache.org> | 2017-04-06 21:49:53 +0000 |
commit | 2254ad2ac3fd8a4c177d57b84c7b8016420b081c (patch) | |
tree | cefdb4e305f79edaa200b6c4c08b2db44576ca67 | |
parent | fe53bc134ec3761a23a98def5f30131ae4729eb1 (diff) | |
download | poi-2254ad2ac3fd8a4c177d57b84c7b8016420b081c.tar.gz poi-2254ad2ac3fd8a4c177d57b84c7b8016420b081c.zip |
Fix issue found via large corpus tests: HSSFPicture in a HSSFShapeGroup might not have a patriarch set, so let's walk up the parents to try to find one.
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1790472 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | src/java/org/apache/poi/hssf/usermodel/HSSFPicture.java | 12 | ||||
-rw-r--r-- | src/ooxml/testcases/org/apache/poi/ss/extractor/TestEmbeddedExtractor.java | 19 | ||||
-rw-r--r-- | test-data/spreadsheet/angelo.edu_content_files_19555-nsse-2011-multiyear-benchmark.xls | bin | 0 -> 684544 bytes |
3 files changed, 30 insertions, 1 deletions
diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFPicture.java b/src/java/org/apache/poi/hssf/usermodel/HSSFPicture.java index 8b3b980fc8..e2d64f96b0 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFPicture.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFPicture.java @@ -204,7 +204,17 @@ public class HSSFPicture extends HSSFSimpleShape implements Picture { * @return picture data for this shape */ public HSSFPictureData getPictureData(){ - InternalWorkbook iwb = getPatriarch().getSheet().getWorkbook().getWorkbook(); + HSSFPatriarch patriarch = getPatriarch(); + HSSFShape parent = getParent(); + while(patriarch == null && parent != null) { + patriarch = parent.getPatriarch(); + parent = parent.getParent(); + } + if(patriarch == null) { + throw new IllegalStateException("Could not find a patriarch for a HSSPicture"); + } + + InternalWorkbook iwb = patriarch.getSheet().getWorkbook().getWorkbook(); EscherBSERecord bse = iwb.getBSERecord(getPictureIndex()); EscherBlipRecord blipRecord = bse.getBlipRecord(); return new HSSFPictureData(blipRecord); diff --git a/src/ooxml/testcases/org/apache/poi/ss/extractor/TestEmbeddedExtractor.java b/src/ooxml/testcases/org/apache/poi/ss/extractor/TestEmbeddedExtractor.java index c8942965d8..669fd33813 100644 --- a/src/ooxml/testcases/org/apache/poi/ss/extractor/TestEmbeddedExtractor.java +++ b/src/ooxml/testcases/org/apache/poi/ss/extractor/TestEmbeddedExtractor.java @@ -18,6 +18,7 @@ package org.apache.poi.ss.extractor; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import java.io.IOException; import java.io.InputStream; @@ -30,6 +31,8 @@ import javax.xml.bind.DatatypeConverter; import org.apache.poi.EncryptedDocumentException; import org.apache.poi.POIDataSamples; +import org.apache.poi.hssf.HSSFTestDataSamples; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; @@ -112,4 +115,20 @@ public class TestEmbeddedExtractor { throw new RuntimeException(e); } } + + + @Test + public void testNPE() throws IOException { + HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("angelo.edu_content_files_19555-nsse-2011-multiyear-benchmark.xls"); + EmbeddedExtractor ee = new EmbeddedExtractor(); + + for (Sheet s : wb) { + for (EmbeddedData ed : ee.extractAll(s)) { + assertNotNull(ed.getFilename()); + assertNotNull(ed.getEmbeddedData()); + assertNotNull(ed.getShape()); + } + } + + } } diff --git a/test-data/spreadsheet/angelo.edu_content_files_19555-nsse-2011-multiyear-benchmark.xls b/test-data/spreadsheet/angelo.edu_content_files_19555-nsse-2011-multiyear-benchmark.xls Binary files differnew file mode 100644 index 0000000000..bff2dea560 --- /dev/null +++ b/test-data/spreadsheet/angelo.edu_content_files_19555-nsse-2011-multiyear-benchmark.xls |