aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDominik Stadler <centic@apache.org>2017-04-06 21:49:53 +0000
committerDominik Stadler <centic@apache.org>2017-04-06 21:49:53 +0000
commit2254ad2ac3fd8a4c177d57b84c7b8016420b081c (patch)
treecefdb4e305f79edaa200b6c4c08b2db44576ca67
parentfe53bc134ec3761a23a98def5f30131ae4729eb1 (diff)
downloadpoi-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.java12
-rw-r--r--src/ooxml/testcases/org/apache/poi/ss/extractor/TestEmbeddedExtractor.java19
-rw-r--r--test-data/spreadsheet/angelo.edu_content_files_19555-nsse-2011-multiyear-benchmark.xlsbin0 -> 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
new file mode 100644
index 0000000000..bff2dea560
--- /dev/null
+++ b/test-data/spreadsheet/angelo.edu_content_files_19555-nsse-2011-multiyear-benchmark.xls
Binary files differ