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]
