Author: centic
Date: Mon Aug  7 16:18:46 2023
New Revision: 1911517

URL: http://svn.apache.org/viewvc?rev=1911517&view=rev
Log:
Bug 66425: Avoid a ClassCastException found via oss-fuzz

We try to avoid throwing ClassCastException, but it was possible
to trigger one here with a specially crafted input-file

Should fix https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=61259

Also fix handling of NullPointerException

Added:
    
poi/trunk/test-data/slideshow/clusterfuzz-testcase-minimized-POIHSLFFuzzer-6416153805979648.ppt
   (with props)
Modified:
    
poi/trunk/poi-integration/src/test/java/org/apache/poi/stress/TestAllFiles.java
    
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFSlideShowImpl.java
    poi/trunk/test-data/spreadsheet/stress.xls

Modified: 
poi/trunk/poi-integration/src/test/java/org/apache/poi/stress/TestAllFiles.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-integration/src/test/java/org/apache/poi/stress/TestAllFiles.java?rev=1911517&r1=1911516&r2=1911517&view=diff
==============================================================================
--- 
poi/trunk/poi-integration/src/test/java/org/apache/poi/stress/TestAllFiles.java 
(original)
+++ 
poi/trunk/poi-integration/src/test/java/org/apache/poi/stress/TestAllFiles.java 
Mon Aug  7 16:18:46 2023
@@ -253,13 +253,22 @@ public class TestAllFiles {
             Exception e = assertThrows((Class<? extends Exception>)exClass, 
exec, errPrefix + " expected " + exClass);
             String actMsg = pathReplace(e.getMessage());
 
-            // verify that message is either null for both or set for both
-            assertTrue(actMsg != null || StringUtils.isBlank(exMessage),
-                    errPrefix + " for " + exClass + " expected message '" + 
exMessage + "' but had '" + actMsg + "'");
+            // perform special handling of NullPointerException as
+            // JDK started to add more information in some newer JDK, so
+            // it sometimes has a message and sometimes not!
+            if (NullPointerException.class.isAssignableFrom(exClass)) {
+                if (actMsg != null) {
+                    assertTrue(actMsg.contains(exMessage), errPrefix + 
"Message: "+actMsg+" - didn't contain: "+exMessage);
+                }
+            } else {
+                // verify that message is either null for both or set for both
+                assertTrue(actMsg != null || StringUtils.isBlank(exMessage),
+                        errPrefix + " for " + exClass + " expected message '" 
+ exMessage + "' but had '" + actMsg + "'");
 
-            if (actMsg != null) {
-                assertTrue(actMsg.contains(exMessage),
-                        errPrefix + "Message: " + actMsg + " - didn't contain: 
" + exMessage);
+                if (actMsg != null) {
+                    assertTrue(actMsg.contains(exMessage),
+                            errPrefix + "Message: " + actMsg + " - didn't 
contain: " + exMessage);
+                }
             }
         } else {
             assertDoesNotThrow(exec, errPrefix);

Modified: 
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFSlideShowImpl.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFSlideShowImpl.java?rev=1911517&r1=1911516&r2=1911517&view=diff
==============================================================================
--- 
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFSlideShowImpl.java
 (original)
+++ 
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFSlideShowImpl.java
 Mon Aug  7 16:18:46 2023
@@ -72,6 +72,7 @@ import org.apache.poi.poifs.crypt.Encryp
 import org.apache.poi.poifs.filesystem.DirectoryNode;
 import org.apache.poi.poifs.filesystem.DocumentEntry;
 import org.apache.poi.poifs.filesystem.DocumentInputStream;
+import org.apache.poi.poifs.filesystem.Entry;
 import org.apache.poi.poifs.filesystem.EntryUtils;
 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
 import org.apache.poi.sl.usermodel.PictureData;
@@ -229,7 +230,11 @@ public final class HSLFSlideShowImpl ext
         }
 
         // Get the main document stream
-        DocumentEntry docProps = 
(DocumentEntry)dir.getEntry(POWERPOINT_DOCUMENT);
+        final Entry entry = dir.getEntry(POWERPOINT_DOCUMENT);
+        if (!(entry instanceof DocumentEntry)) {
+            throw new IllegalArgumentException("Had unexpected type of entry 
for name: " + POWERPOINT_DOCUMENT + ": " + entry.getClass());
+        }
+        DocumentEntry docProps = (DocumentEntry) entry;
 
         // Grab the document stream
         int len = docProps.getSize();

Added: 
poi/trunk/test-data/slideshow/clusterfuzz-testcase-minimized-POIHSLFFuzzer-6416153805979648.ppt
URL: 
http://svn.apache.org/viewvc/poi/trunk/test-data/slideshow/clusterfuzz-testcase-minimized-POIHSLFFuzzer-6416153805979648.ppt?rev=1911517&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
poi/trunk/test-data/slideshow/clusterfuzz-testcase-minimized-POIHSLFFuzzer-6416153805979648.ppt
------------------------------------------------------------------------------
    svn:mime-type = application/vnd.ms-powerpoint

Modified: poi/trunk/test-data/spreadsheet/stress.xls
URL: 
http://svn.apache.org/viewvc/poi/trunk/test-data/spreadsheet/stress.xls?rev=1911517&r1=1911516&r2=1911517&view=diff
==============================================================================
Binary files - no diff available.



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

Reply via email to