You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2024/02/02 19:58:03 UTC

(commons-compress) 07/07: Make org.apache.commons.compress.archivers.sevenz.StreamMap ivars final

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 3a1b9cb9662a76a4a8aa6b8f460854ae8e976f24
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Fri Feb 2 13:43:08 2024 -0500

    Make org.apache.commons.compress.archivers.sevenz.StreamMap ivars
    final
---
 .../compress/archivers/sevenz/SevenZFile.java      | 35 ++++++++++------------
 .../compress/archivers/sevenz/StreamMap.java       | 15 +++++++---
 2 files changed, 26 insertions(+), 24 deletions(-)

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 492b35cab..0fad4fb2e 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
@@ -825,36 +825,32 @@ public class SevenZFile implements Closeable {
     }
 
     private void calculateStreamMap(final Archive archive) throws IOException {
-        final StreamMap streamMap = new StreamMap();
-
         int nextFolderPackStreamIndex = 0;
         final int numFolders = archive.folders != null ? archive.folders.length : 0;
-        streamMap.folderFirstPackStreamIndex = new int[numFolders];
+        final int[] folderFirstPackStreamIndex = new int[numFolders];
         for (int i = 0; i < numFolders; i++) {
-            streamMap.folderFirstPackStreamIndex[i] = nextFolderPackStreamIndex;
+            folderFirstPackStreamIndex[i] = nextFolderPackStreamIndex;
             nextFolderPackStreamIndex += archive.folders[i].packedStreams.length;
         }
-
         long nextPackStreamOffset = 0;
         final int numPackSizes = archive.packSizes.length;
-        streamMap.packStreamOffsets = new long[numPackSizes];
+        final long[] packStreamOffsets = new long[numPackSizes];
         for (int i = 0; i < numPackSizes; i++) {
-            streamMap.packStreamOffsets[i] = nextPackStreamOffset;
+            packStreamOffsets[i] = nextPackStreamOffset;
             nextPackStreamOffset += archive.packSizes[i];
         }
-
-        streamMap.folderFirstFileIndex = new int[numFolders];
-        streamMap.fileFolderIndex = new int[archive.files.length];
+        final int[] folderFirstFileIndex = new int[numFolders];
+        final int[] fileFolderIndex = new int[archive.files.length];
         int nextFolderIndex = 0;
         int nextFolderUnpackStreamIndex = 0;
         for (int i = 0; i < archive.files.length; i++) {
             if (!archive.files[i].hasStream() && nextFolderUnpackStreamIndex == 0) {
-                streamMap.fileFolderIndex[i] = -1;
+                fileFolderIndex[i] = -1;
                 continue;
             }
             if (nextFolderUnpackStreamIndex == 0) {
                 for (; nextFolderIndex < archive.folders.length; ++nextFolderIndex) {
-                    streamMap.folderFirstFileIndex[nextFolderIndex] = i;
+                    folderFirstFileIndex[nextFolderIndex] = i;
                     if (archive.folders[nextFolderIndex].numUnpackSubStreams > 0) {
                         break;
                     }
@@ -863,7 +859,7 @@ public class SevenZFile implements Closeable {
                     throw new IOException("Too few folders in archive");
                 }
             }
-            streamMap.fileFolderIndex[i] = nextFolderIndex;
+            fileFolderIndex[i] = nextFolderIndex;
             if (!archive.files[i].hasStream()) {
                 continue;
             }
@@ -873,8 +869,7 @@ public class SevenZFile implements Closeable {
                 nextFolderUnpackStreamIndex = 0;
             }
         }
-
-        archive.streamMap = streamMap;
+        archive.streamMap = new StreamMap(folderFirstPackStreamIndex, packStreamOffsets, folderFirstFileIndex, fileFolderIndex);
     }
 
     private void checkEntryIsInitialized(final Map<Integer, SevenZArchiveEntry> archiveEntries, final int index) {
@@ -1543,16 +1538,16 @@ public class SevenZFile implements Closeable {
         // built-in CRC check
         try (DataInputStream dataInputStream = new DataInputStream(
                 new CRC32VerifyingInputStream(new BoundedSeekableByteChannelInputStream(channel, 20), 20, startHeaderCrc))) {
-            long nextHeaderOffset = Long.reverseBytes(dataInputStream.readLong());
+            final long nextHeaderOffset = Long.reverseBytes(dataInputStream.readLong());
             if (nextHeaderOffset < 0 || nextHeaderOffset + SIGNATURE_HEADER_SIZE > channel.size()) {
                 throw new IOException("nextHeaderOffset is out of bounds");
             }
-            long nextHeaderSize = Long.reverseBytes(dataInputStream.readLong());
+            final long nextHeaderSize = Long.reverseBytes(dataInputStream.readLong());
             final long nextHeaderEnd = nextHeaderOffset + nextHeaderSize;
             if (nextHeaderEnd < nextHeaderOffset || nextHeaderEnd + SIGNATURE_HEADER_SIZE > channel.size()) {
                 throw new IOException("nextHeaderSize is out of bounds");
             }
-            long nextHeaderCrc = 0xffffFFFFL & Integer.reverseBytes(dataInputStream.readInt());
+            final long nextHeaderCrc = 0xffffFFFFL & Integer.reverseBytes(dataInputStream.readInt());
             return new StartHeader(nextHeaderOffset, nextHeaderSize, nextHeaderCrc);
         }
     }
@@ -2216,8 +2211,8 @@ public class SevenZFile implements Closeable {
             if (nid == NID.kEncodedHeader || nid == NID.kHeader) {
                 try {
                     // Try to initialize Archive structure from here
-                    long nextHeaderOffset = pos - previousDataSize;
-                    long nextHeaderSize = channel.size() - pos;
+                    final long nextHeaderOffset = pos - previousDataSize;
+                    final long nextHeaderSize = channel.size() - pos;
                     final StartHeader startHeader = new StartHeader(nextHeaderOffset, nextHeaderSize, 0);
                     final Archive result = initializeArchive(startHeader, password, false);
                     // Sanity check: There must be some data...
diff --git a/src/main/java/org/apache/commons/compress/archivers/sevenz/StreamMap.java b/src/main/java/org/apache/commons/compress/archivers/sevenz/StreamMap.java
index 1647e963c..f527daebe 100644
--- a/src/main/java/org/apache/commons/compress/archivers/sevenz/StreamMap.java
+++ b/src/main/java/org/apache/commons/compress/archivers/sevenz/StreamMap.java
@@ -24,22 +24,29 @@ final class StreamMap {
     /**
      * The first Archive.packStream index of each folder.
      */
-    int[] folderFirstPackStreamIndex;
+    final int[] folderFirstPackStreamIndex;
 
     /**
      * Offset to beginning of this pack stream's data, relative to the beginning of the first pack stream.
      */
-    long[] packStreamOffsets;
+    final long[] packStreamOffsets;
 
     /**
      * Index of first file for each folder.
      */
-    int[] folderFirstFileIndex;
+    final int[] folderFirstFileIndex;
 
     /**
      * Index of folder for each file.
      */
-    int[] fileFolderIndex;
+    final int[] fileFolderIndex;
+
+    StreamMap(final int[] folderFirstPackStreamIndex, final long[] packStreamOffsets, final int[] folderFirstFileIndex, final int[] fileFolderIndex) {
+        this.folderFirstPackStreamIndex = folderFirstPackStreamIndex;
+        this.packStreamOffsets = packStreamOffsets;
+        this.folderFirstFileIndex = folderFirstFileIndex;
+        this.fileFolderIndex = fileFolderIndex;
+    }
 
     @Override
     public String toString() {