This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-compress.git
commit 404d9d5610be1e038b1d7ce4f0faad3d085ed31c Author: Gary Gregory <garydgreg...@gmail.com> AuthorDate: Fri Feb 2 13:09:34 2024 -0500 Make org.apache.commons.compress.archivers.sevenz.Coder ivars final --- .../commons/compress/archivers/sevenz/Coder.java | 16 ++++++++++---- .../compress/archivers/sevenz/SevenZFile.java | 25 ++++++++++++---------- .../archivers/sevenz/AES256SHA256DecoderTest.java | 3 +-- .../compress/archivers/sevenz/FolderTest.java | 2 +- 4 files changed, 28 insertions(+), 18 deletions(-) diff --git a/src/main/java/org/apache/commons/compress/archivers/sevenz/Coder.java b/src/main/java/org/apache/commons/compress/archivers/sevenz/Coder.java index a43ae5b92..af0d6dc78 100644 --- a/src/main/java/org/apache/commons/compress/archivers/sevenz/Coder.java +++ b/src/main/java/org/apache/commons/compress/archivers/sevenz/Coder.java @@ -17,8 +17,16 @@ package org.apache.commons.compress.archivers.sevenz; final class Coder { - byte[] decompressionMethodId; - long numInStreams; - long numOutStreams; - byte[] properties; + + final byte[] decompressionMethodId; + final long numInStreams; + final long numOutStreams; + final byte[] properties; + + Coder(final byte[] decompressionMethodId, final long numInStreams, final long numOutStreams, final byte[] properties) { + this.decompressionMethodId = decompressionMethodId; + this.numInStreams = numInStreams; + this.numOutStreams = numOutStreams; + this.properties = properties; + } } diff --git a/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZFile.java b/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZFile.java index 177806727..bc3ae48b1 100644 --- a/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZFile.java +++ b/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZFile.java @@ -1370,34 +1370,37 @@ public class SevenZFile implements Closeable { long totalInStreams = 0; long totalOutStreams = 0; for (int i = 0; i < coders.length; i++) { - coders[i] = new Coder(); final int bits = getUnsignedByte(header); final int idSize = bits & 0xf; final boolean isSimple = (bits & 0x10) == 0; final boolean hasAttributes = (bits & 0x20) != 0; final boolean moreAlternativeMethods = (bits & 0x80) != 0; - coders[i].decompressionMethodId = new byte[idSize]; - get(header, coders[i].decompressionMethodId); + final byte[] decompressionMethodId = new byte[idSize]; + get(header, decompressionMethodId); + final long numInStreams; + final long numOutStreams; if (isSimple) { - coders[i].numInStreams = 1; - coders[i].numOutStreams = 1; + numInStreams = 1; + numOutStreams = 1; } else { - coders[i].numInStreams = readUint64(header); - coders[i].numOutStreams = readUint64(header); + numInStreams = readUint64(header); + numOutStreams = readUint64(header); } - totalInStreams += coders[i].numInStreams; - totalOutStreams += coders[i].numOutStreams; + totalInStreams += numInStreams; + totalOutStreams += numOutStreams; + byte[] properties = null; if (hasAttributes) { final long propertiesSize = readUint64(header); - coders[i].properties = new byte[(int) propertiesSize]; - get(header, coders[i].properties); + properties = new byte[(int) propertiesSize]; + get(header, properties); } // would need to keep looping as above: if (moreAlternativeMethods) { throw new IOException("Alternative methods are unsupported, please report. " + // NOSONAR "The reference implementation doesn't support them either."); } + coders[i] = new Coder(decompressionMethodId, numInStreams, numOutStreams, properties); } folder.coders = coders; folder.totalInputStreams = totalInStreams; diff --git a/src/test/java/org/apache/commons/compress/archivers/sevenz/AES256SHA256DecoderTest.java b/src/test/java/org/apache/commons/compress/archivers/sevenz/AES256SHA256DecoderTest.java index 416de4f99..05641c3c3 100644 --- a/src/test/java/org/apache/commons/compress/archivers/sevenz/AES256SHA256DecoderTest.java +++ b/src/test/java/org/apache/commons/compress/archivers/sevenz/AES256SHA256DecoderTest.java @@ -40,10 +40,9 @@ public class AES256SHA256DecoderTest { final AES256SHA256Decoder aES256SHA256Decoder = new AES256SHA256Decoder(); try (BufferedInputStream bufferedInputStream = new BufferedInputStream(null, 3138)) { - final Coder coder = new Coder(); final byte[] byteArray = new byte[8]; byteArray[1] = (byte) -72; - coder.properties = byteArray; + final Coder coder = new Coder(null, 0, 0, byteArray); try (InputStream inputStream = aES256SHA256Decoder.decode("x", bufferedInputStream, 3138, coder, coder.properties, Integer.MAX_VALUE)) { final IOException e = assertThrows(IOException.class, () -> new ObjectInputStream(inputStream), "Expecting exception: IOException"); assertEquals("Salt size + IV size too long in x", e.getMessage()); diff --git a/src/test/java/org/apache/commons/compress/archivers/sevenz/FolderTest.java b/src/test/java/org/apache/commons/compress/archivers/sevenz/FolderTest.java index 0d439b3d9..627aa32d9 100644 --- a/src/test/java/org/apache/commons/compress/archivers/sevenz/FolderTest.java +++ b/src/test/java/org/apache/commons/compress/archivers/sevenz/FolderTest.java @@ -47,7 +47,7 @@ public class FolderTest { final Folder folder = new Folder(); final Coder[] coderArray = new Coder[5]; - final Coder coder = new Coder(); + final Coder coder = new Coder(null, 0, 0, null); folder.coders = coderArray; assertEquals(0L, folder.getUnpackSizeForCoder(coder));