Philip Betzler-Braun created COMPRESS-712:
---------------------------------------------

             Summary: unsanitized read causes IndexOutOfBoundsException in 
DumpArchiveInputStream.java:359
                 Key: COMPRESS-712
                 URL: https://issues.apache.org/jira/browse/COMPRESS-712
             Project: Commons Compress
          Issue Type: Bug
          Components: Archivers
         Environment: Ubuntu 24.04

$ java --version
openjdk 21.0.8 2025-07-15
OpenJDK Runtime Environment (build 21.0.8+9-Ubuntu-0ubuntu124.04.1)
OpenJDK 64-Bit Server VM (build 21.0.8+9-Ubuntu-0ubuntu124.04.1, mixed mode, 
sharing)
            Reporter: Philip Betzler-Braun
         Attachments: IndexOutOfBoundsReproducerInDumpArchiveInputStream.java

*Issue:*

 

When reading in unsanitized data in the readDirectoryEntry(DumpArchiveEntry 
entry) 
(org/apache/commons/compress/archivers/dump/DumpArchiveInputStream.java:514) 
the call to DumpArchiveUtil.convert32(blockBuffer, i) 
(DumpArchiveInputStream.java:542) can return negative numbers that are stored 
down the line as int inos in the "name" HashMap. 

When trying to get the path of the DumpArchiveEntry 
(DumpArchiveInputStream.getPath(DumpArchiveInputStream.java:359)) the "names" 
Hashmap is used as filter befor querrying the visited inos. The visited inos 
are stored in a BitSet. If the DumpArchiveEntry or a parent directory contains 
a negative number that was also saved earlier in the "name" Hashmap, the get 
(java.base/java.util.BitSet.get(BitSet.java:626)) function is throwing an 
java.lang.IndexOutOfBoundsException.

 

*Suggestion:*
 # Catch negative ino numbers in a wrapper function around 
DumpArchiveUtil.convert32 and throw an expected error.
 # Catch all internal (runtime) exceptions and throw a general expected 
exception.

 

{*}Reproducer:{*}{*}{*}

(attached as file -> expected position: 
src/test/java/org/apache/commons/compress/archivers/IndexOutOfBoundsReproducerInDumpArchiveInputStream.java)

*[^IndexOutOfBoundsReproducerInDumpArchiveInputStream.java]*



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to