Author: fanningpj
Date: Sat Jun 14 14:14:15 2025
New Revision: 1926414

URL: http://svn.apache.org/viewvc?rev=1926414&view=rev
Log:
[bug-69697] HSLF getPictureData can return null for some pictures

Added:
    poi/trunk/test-data/slideshow/bug69697.ppt   (with props)
Modified:
    
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFFill.java
    
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFPictureShape.java
    
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/usermodel/TestBugs.java

Modified: 
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFFill.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFFill.java?rev=1926414&r1=1926413&r2=1926414&view=diff
==============================================================================
--- 
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFFill.java
 (original)
+++ 
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFFill.java
 Sat Jun 14 14:14:15 2025
@@ -576,9 +576,7 @@ public final class HSLFFill {
         } else {
             EscherBSERecord bse = (EscherBSERecord) bstore.getChild(idx - 1);
             for (HSLFPictureData pd : pict) {
-
-                // Reference equals is safe because these BSE belong to the 
same slideshow
-                if (pd.bse == bse) {
+                if (pd.getOffset() == bse.getOffset()) {
                     return pd;
                 }
             }

Modified: 
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFPictureShape.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFPictureShape.java?rev=1926414&r1=1926413&r2=1926414&view=diff
==============================================================================
--- 
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFPictureShape.java
 (original)
+++ 
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFPictureShape.java
 Sat Jun 14 14:14:15 2025
@@ -124,9 +124,7 @@ public class HSLFPictureShape extends HS
             LOG.atError().log("no reference to picture data found ");
         } else {
             for (HSLFPictureData pd : pict) {
-
-                // Reference equals is safe because these BSE belong to the 
same slideshow
-                if (pd.bse == bse) {
+                if (pd.getOffset() == bse.getOffset()) {
                     return pd;
                 }
             }

Modified: 
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/usermodel/TestBugs.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/usermodel/TestBugs.java?rev=1926414&r1=1926413&r2=1926414&view=diff
==============================================================================
--- 
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/usermodel/TestBugs.java
 (original)
+++ 
poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hslf/usermodel/TestBugs.java
 Sat Jun 14 14:14:15 2025
@@ -47,6 +47,7 @@ import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
 import org.apache.poi.POIDataSamples;
 import org.apache.poi.common.usermodel.fonts.FontGroup;
 import org.apache.poi.ddf.AbstractEscherOptRecord;
@@ -68,19 +69,10 @@ import org.apache.poi.poifs.filesystem.P
 import org.apache.poi.poifs.macros.VBAMacroReader;
 import org.apache.poi.sl.draw.DrawPaint;
 import org.apache.poi.sl.extractor.SlideShowExtractor;
-import org.apache.poi.sl.usermodel.ColorStyle;
-import org.apache.poi.sl.usermodel.PaintStyle;
+import org.apache.poi.sl.usermodel.*;
 import org.apache.poi.sl.usermodel.PaintStyle.SolidPaint;
 import org.apache.poi.sl.usermodel.PictureData.PictureType;
-import org.apache.poi.sl.usermodel.Placeholder;
-import org.apache.poi.sl.usermodel.ShapeType;
-import org.apache.poi.sl.usermodel.Slide;
-import org.apache.poi.sl.usermodel.SlideShow;
-import org.apache.poi.sl.usermodel.SlideShowFactory;
-import org.apache.poi.sl.usermodel.TextBox;
-import org.apache.poi.sl.usermodel.TextParagraph;
 import org.apache.poi.sl.usermodel.TextParagraph.TextAlign;
-import org.apache.poi.sl.usermodel.TextRun;
 import org.apache.poi.util.LittleEndian;
 import org.apache.poi.util.StringUtil;
 import org.apache.poi.util.Units;
@@ -904,4 +896,22 @@ public final class TestBugs {
             assertEquals(ShapeType.NOT_PRIMITIVE, 
shList.get(2).getShapeType());
         }
     }
+
+    @Test
+    void test69697() throws Exception {
+        try (HSLFSlideShow ppt = open("bug69697.ppt")) {
+            HSLFSlide slide = ppt.getSlides().get(0);
+            for (HSLFShape sh : slide.getShapes()) {
+                if (sh instanceof HSLFPictureShape) {
+                    HSLFPictureShape pict = (HSLFPictureShape) sh;
+                    HSLFPictureData pictData = pict.getPictureData();
+                    assertNotNull(pictData, "PictureData should not be null 
for shape: " + pict.getShapeName());
+                    byte[] data = pictData.getData();
+                    assertNotNull(data, "Picture data should not be null for 
shape: " + pict.getShapeName());
+                    PictureData.PictureType type = pictData.getType();
+                    assertNotNull(type, "Picture type should not be null for 
shape: " + pict.getShapeName());
+                }
+            }
+        }
+    }
 }

Added: poi/trunk/test-data/slideshow/bug69697.ppt
URL: 
http://svn.apache.org/viewvc/poi/trunk/test-data/slideshow/bug69697.ppt?rev=1926414&view=auto
==============================================================================
Binary file - no diff available.

Propchange: poi/trunk/test-data/slideshow/bug69697.ppt
------------------------------------------------------------------------------
    svn:mime-type = application/vnd.ms-powerpoint



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

Reply via email to