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]