Author: centic
Date: Sat Aug 12 17:37:14 2023
New Revision: 1911618

URL: http://svn.apache.org/viewvc?rev=1911618&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=61400

Added:
    
poi/trunk/test-data/hsmf/clusterfuzz-testcase-minimized-POIHSMFFuzzer-5336473854148608.msg
Modified:
    
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hsmf/datatypes/RecipientChunks.java
    poi/trunk/test-data/spreadsheet/stress.xls

Modified: 
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hsmf/datatypes/RecipientChunks.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hsmf/datatypes/RecipientChunks.java?rev=1911618&r1=1911617&r2=1911618&view=diff
==============================================================================
--- 
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hsmf/datatypes/RecipientChunks.java
 (original)
+++ 
poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hsmf/datatypes/RecipientChunks.java
 Sat Aug 12 17:37:14 2023
@@ -187,7 +187,7 @@ public final class RecipientChunks imple
     }
 
     /** Holds all the chunks that were found. */
-    private List<Chunk> allChunks = new ArrayList<>();
+    private final List<Chunk> allChunks = new ArrayList<>();
 
     @Override
     public Map<MAPIProperty, List<PropertyValue>> getProperties() {
@@ -212,21 +212,26 @@ public final class RecipientChunks imple
      */
     @Override
     public void record(Chunk chunk) {
-        if (chunk.getChunkId() == RECIPIENT_SEARCH.id) {
-            // TODO - parse
-            recipientSearchChunk = (ByteChunk) chunk;
-        } else if (chunk.getChunkId() == RECIPIENT_NAME.id) {
-            recipientDisplayNameChunk = (StringChunk) chunk;
-        } else if (chunk.getChunkId() == RECIPIENT_DISPLAY_NAME.id) {
-            recipientNameChunk = (StringChunk) chunk;
-        } else if (chunk.getChunkId() == RECIPIENT_EMAIL_ADDRESS.id) {
-            recipientEmailChunk = (StringChunk) chunk;
-        } else if (chunk.getChunkId() == RECIPIENT_SMTP_ADDRESS.id) {
-            recipientSMTPChunk = (StringChunk) chunk;
-        } else if (chunk.getChunkId() == DELIVERY_TYPE.id) {
-            deliveryTypeChunk = (StringChunk) chunk;
-        } else if (chunk instanceof PropertiesChunk) {
-            recipientProperties = (PropertiesChunk) chunk;
+        try {
+            if (chunk.getChunkId() == RECIPIENT_SEARCH.id) {
+                // TODO - parse
+                recipientSearchChunk = (ByteChunk) chunk;
+            } else if (chunk.getChunkId() == RECIPIENT_NAME.id) {
+                recipientDisplayNameChunk = (StringChunk) chunk;
+            } else if (chunk.getChunkId() == RECIPIENT_DISPLAY_NAME.id) {
+                recipientNameChunk = (StringChunk) chunk;
+            } else if (chunk.getChunkId() == RECIPIENT_EMAIL_ADDRESS.id) {
+                recipientEmailChunk = (StringChunk) chunk;
+            } else if (chunk.getChunkId() == RECIPIENT_SMTP_ADDRESS.id) {
+                recipientSMTPChunk = (StringChunk) chunk;
+            } else if (chunk.getChunkId() == DELIVERY_TYPE.id) {
+                deliveryTypeChunk = (StringChunk) chunk;
+            } else if (chunk instanceof PropertiesChunk) {
+                recipientProperties = (PropertiesChunk) chunk;
+            }
+        } catch (ClassCastException e) {
+            throw new IllegalArgumentException("ChunkId and type of chunk did 
not match, had id " +
+                    chunk.getChunkId() + " and type of chunk: " + 
chunk.getClass(), e);
         }
 
         // And add to the main list

Added: 
poi/trunk/test-data/hsmf/clusterfuzz-testcase-minimized-POIHSMFFuzzer-5336473854148608.msg
URL: 
http://svn.apache.org/viewvc/poi/trunk/test-data/hsmf/clusterfuzz-testcase-minimized-POIHSMFFuzzer-5336473854148608.msg?rev=1911618&view=auto
==============================================================================
Binary files 
poi/trunk/test-data/hsmf/clusterfuzz-testcase-minimized-POIHSMFFuzzer-5336473854148608.msg
 (added) and 
poi/trunk/test-data/hsmf/clusterfuzz-testcase-minimized-POIHSMFFuzzer-5336473854148608.msg
 Sat Aug 12 17:37:14 2023 differ

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



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@poi.apache.org
For additional commands, e-mail: commits-h...@poi.apache.org

Reply via email to