This is an automated email from the ASF dual-hosted git repository.

centic pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/poi.git

commit 0ec4434f599d1d34922ee49ff139d9a5d28f3fda
Author: Dominik Stadler <[email protected]>
AuthorDate: Tue Jan 6 23:50:13 2026 +0100

    Avoid NPE with broken file
---
 .../org/apache/poi/hslf/usermodel/HSLFShape.java    |  10 ++++++----
 .../poi/hslf/usermodel/HSLFTextParagraph.java       |   3 +++
 .../org/apache/poi/hslf/dev/TestPPTXMLDump.java     |   1 +
 .../apache/poi/hslf/dev/TestSlideShowDumper.java    |   1 +
 .../60f557c0a46bcb0068b1c3e15589dac383307bc8.ppt    | Bin 0 -> 44032 bytes
 test-data/spreadsheet/stress.xls                    | Bin 73216 -> 73728 bytes
 6 files changed, 11 insertions(+), 4 deletions(-)

diff --git 
a/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFShape.java 
b/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFShape.java
index 87fa7c21fb..b234a80833 100644
--- a/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFShape.java
+++ b/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFShape.java
@@ -408,11 +408,13 @@ public abstract class HSLFShape implements 
Shape<HSLFShape,HSLFTextParagraph> {
         if (fSchemeIndex && sheet != null) {
             //red is the index to the color scheme
             ColorSchemeAtom ca = sheet.getColorScheme();
-            int schemeColor = ca.getColor(ecr.getSchemeIndex());
+            if (ca != null) {
+                int schemeColor = ca.getColor(ecr.getSchemeIndex());
 
-            rgb[0] = (schemeColor >> 0) & 0xFF;
-            rgb[1] = (schemeColor >> 8) & 0xFF;
-            rgb[2] = (schemeColor >> 16) & 0xFF;
+                rgb[0] = (schemeColor >> 0) & 0xFF;
+                rgb[1] = (schemeColor >> 8) & 0xFF;
+                rgb[2] = (schemeColor >> 16) & 0xFF;
+            }
         } else if (fPaletteIndex) {
             //TODO
         } else if (fPaletteRGB) {
diff --git 
a/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFTextParagraph.java
 
b/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFTextParagraph.java
index 4e5e3280d2..d7b4b3cb71 100644
--- 
a/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFTextParagraph.java
+++ 
b/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFTextParagraph.java
@@ -1665,6 +1665,9 @@ public final class HSLFTextParagraph implements 
TextParagraph<HSLFShape,HSLFText
                     return null;
                 }
                 ColorSchemeAtom ca = sheet.getColorScheme();
+                if (ca == null) {
+                    throw new IllegalStateException("Cannot read color scheme 
from sheet");
+                }
                 tmp = new Color(ca.getColor(cidx), true);
                 break;
             // Color is an sRGB value specified by red, green, and blue fields.
diff --git 
a/poi-scratchpad/src/test/java/org/apache/poi/hslf/dev/TestPPTXMLDump.java 
b/poi-scratchpad/src/test/java/org/apache/poi/hslf/dev/TestPPTXMLDump.java
index 213b05387c..7c2ec525c7 100644
--- a/poi-scratchpad/src/test/java/org/apache/poi/hslf/dev/TestPPTXMLDump.java
+++ b/poi-scratchpad/src/test/java/org/apache/poi/hslf/dev/TestPPTXMLDump.java
@@ -37,6 +37,7 @@ public class TestPPTXMLDump extends BaseTestPPTIterating {
         
LOCAL_EXCLUDED.add("clusterfuzz-testcase-minimized-POIHSLFFuzzer-6360479850954752.ppt");
         LOCAL_EXCLUDED.add("ppt_with_png_encrypted.ppt");
         
LOCAL_EXCLUDED.add("clusterfuzz-testcase-minimized-POIHSLFFuzzer-6614960949821440.ppt");
+        LOCAL_EXCLUDED.add("60f557c0a46bcb0068b1c3e15589dac383307bc8.ppt");
     }
 
     @Test
diff --git 
a/poi-scratchpad/src/test/java/org/apache/poi/hslf/dev/TestSlideShowDumper.java 
b/poi-scratchpad/src/test/java/org/apache/poi/hslf/dev/TestSlideShowDumper.java
index 290616ce10..1c97bba430 100644
--- 
a/poi-scratchpad/src/test/java/org/apache/poi/hslf/dev/TestSlideShowDumper.java
+++ 
b/poi-scratchpad/src/test/java/org/apache/poi/hslf/dev/TestSlideShowDumper.java
@@ -39,6 +39,7 @@ public class TestSlideShowDumper extends BaseTestPPTIterating 
{
         FAILING.add("41384.ppt");
         FAILING.add("bug56240.ppt");
         
FAILING.add("clusterfuzz-testcase-minimized-POIHSLFFuzzer-6360479850954752.ppt");
+        FAILING.add("60f557c0a46bcb0068b1c3e15589dac383307bc8.ppt");
     }
 
     static final Set<String> LOCAL_EXCLUDED = new HashSet<>();
diff --git a/test-data/slideshow/60f557c0a46bcb0068b1c3e15589dac383307bc8.ppt 
b/test-data/slideshow/60f557c0a46bcb0068b1c3e15589dac383307bc8.ppt
new file mode 100644
index 0000000000..3d8459400c
Binary files /dev/null and 
b/test-data/slideshow/60f557c0a46bcb0068b1c3e15589dac383307bc8.ppt differ
diff --git a/test-data/spreadsheet/stress.xls b/test-data/spreadsheet/stress.xls
index a3a5a5694a..40c8ad9c04 100644
Binary files a/test-data/spreadsheet/stress.xls and 
b/test-data/spreadsheet/stress.xls differ


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

Reply via email to