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;
