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));

Reply via email to