Author: centic
Date: Thu Apr  6 21:49:53 2017
New Revision: 1790472

URL: http://svn.apache.org/viewvc?rev=1790472&view=rev
Log:
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.

Added:
    
poi/trunk/test-data/spreadsheet/angelo.edu_content_files_19555-nsse-2011-multiyear-benchmark.xls
Modified:
    poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFPicture.java
    
poi/trunk/src/ooxml/testcases/org/apache/poi/ss/extractor/TestEmbeddedExtractor.java

Modified: poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFPicture.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFPicture.java?rev=1790472&r1=1790471&r2=1790472&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFPicture.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFPicture.java Thu Apr  
6 21:49:53 2017
@@ -204,7 +204,17 @@ public class HSSFPicture extends HSSFSim
      * @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);

Modified: 
poi/trunk/src/ooxml/testcases/org/apache/poi/ss/extractor/TestEmbeddedExtractor.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/ss/extractor/TestEmbeddedExtractor.java?rev=1790472&r1=1790471&r2=1790472&view=diff
==============================================================================
--- 
poi/trunk/src/ooxml/testcases/org/apache/poi/ss/extractor/TestEmbeddedExtractor.java
 (original)
+++ 
poi/trunk/src/ooxml/testcases/org/apache/poi/ss/extractor/TestEmbeddedExtractor.java
 Thu Apr  6 21:49:53 2017
@@ -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());
+            }
+        }
+
+    }
 }

Added: 
poi/trunk/test-data/spreadsheet/angelo.edu_content_files_19555-nsse-2011-multiyear-benchmark.xls
URL: 
http://svn.apache.org/viewvc/poi/trunk/test-data/spreadsheet/angelo.edu_content_files_19555-nsse-2011-multiyear-benchmark.xls?rev=1790472&view=auto
==============================================================================
Binary files 
poi/trunk/test-data/spreadsheet/angelo.edu_content_files_19555-nsse-2011-multiyear-benchmark.xls
 (added) and 
poi/trunk/test-data/spreadsheet/angelo.edu_content_files_19555-nsse-2011-multiyear-benchmark.xls
 Thu Apr  6 21:49:53 2017 differ



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to