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

garydgregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-compress.git

commit 83715c60345b02dd6d929c4bbbbffe91ba041dd2
Author: Gary Gregory <[email protected]>
AuthorDate: Tue Jul 21 08:36:23 2026 -0700

    Reject out-of-range indices in pack200 BandSet.getReferences (#788).
    
    Internal refactoring
---
 .../commons/compress/harmony/unpack200/BandSet.java   | 19 +++++++++----------
 1 file changed, 9 insertions(+), 10 deletions(-)

diff --git 
a/src/main/java/org/apache/commons/compress/harmony/unpack200/BandSet.java 
b/src/main/java/org/apache/commons/compress/harmony/unpack200/BandSet.java
index eeceeb9f2..a9b5af86a 100644
--- a/src/main/java/org/apache/commons/compress/harmony/unpack200/BandSet.java
+++ b/src/main/java/org/apache/commons/compress/harmony/unpack200/BandSet.java
@@ -80,6 +80,13 @@ public BandSet(final Segment segment) {
         this.header = segment.getSegmentHeader();
     }
 
+    private int checkArrayIndex(final String[] reference, final int index) 
throws Pack200Exception {
+        if (index < 0 || index >= reference.length) {
+            throw new Pack200Exception("Invalid array index = %,d, array 
length = %,d", index, reference.length);
+        }
+        return index;
+    }
+
     /**
      * Decodes a band and return an array of {@code int} values.
      *
@@ -189,11 +196,7 @@ public int[][] decodeBandInt(final String name, final 
InputStream in, final BHSD
     protected String[] getReferences(final int[] ints, final String[] 
reference) throws Pack200Exception {
         final String[] result = new String[ints.length];
         for (int i = 0; i < ints.length; i++) {
-            final int index = ints[i];
-            if (index < 0 || index >= reference.length) {
-                throw new Pack200Exception("Invalid reference index = %,d, 
array length = %,d", index, reference.length);
-            }
-            result[i] = reference[index];
+            result[i] = reference[checkArrayIndex(reference, ints[i])];
         }
         return result;
     }
@@ -211,11 +214,7 @@ protected String[][] getReferences(final int[][] ints, 
final String[] reference)
         for (int i = 0; i < result.length; i++) {
             result[i] = new String[ints[i].length];
             for (int j = 0; j < result[i].length; j++) {
-                final int index = ints[i][j];
-                if (index < 0 || index >= reference.length) {
-                    throw new Pack200Exception("Invalid reference index = %,d, 
array length = %,d", index, reference.length);
-                }
-                result[i][j] = reference[index];
+                result[i][j] = reference[checkArrayIndex(reference, 
ints[i][j])];
             }
         }
         return result;

Reply via email to