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 68f94a4a2947dc214a50b725f1d18cb16c6f8add
Author: Gary D. Gregory <garydgreg...@gmail.com>
AuthorDate: Sat Mar 1 15:44:21 2025 -0500

    Fix internal position state in FileRandomAccessOutputStream only used
    for testing
---
 .../zip/FileRandomAccessOutputStream.java          |  1 +
 .../archivers/zip/ZipArchiveOutputStream.java      | 22 +++++++++++-----------
 .../zip/FileRandomAccessOutputStreamTest.java      |  4 ++--
 3 files changed, 14 insertions(+), 13 deletions(-)

diff --git 
a/src/main/java/org/apache/commons/compress/archivers/zip/FileRandomAccessOutputStream.java
 
b/src/main/java/org/apache/commons/compress/archivers/zip/FileRandomAccessOutputStream.java
index 2748fd241..ee3e39f94 100644
--- 
a/src/main/java/org/apache/commons/compress/archivers/zip/FileRandomAccessOutputStream.java
+++ 
b/src/main/java/org/apache/commons/compress/archivers/zip/FileRandomAccessOutputStream.java
@@ -80,5 +80,6 @@ public void writeAll(final byte[] b, final int off, final int 
len, final long po
             }
             currentPos += written;
         }
+        position += len;
     }
 }
diff --git 
a/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java
 
b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java
index d0ccb78f6..7f9759350 100644
--- 
a/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java
+++ 
b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java
@@ -1243,20 +1243,20 @@ private void putArchiveEntry(final ZipArchiveEntry 
archiveEntry, final boolean p
      * sizes.
      */
     private void rewriteSizesAndCrc(final boolean actuallyNeedsZip64) throws 
IOException {
-        final RandomAccessOutputStream randomStream = 
(RandomAccessOutputStream) out;
+        final RandomAccessOutputStream outputStream = 
(RandomAccessOutputStream) out;
         long dataStart = entry.localDataStart;
-        if (randomStream instanceof ZipSplitOutputStream) {
-            dataStart = ((ZipSplitOutputStream) 
randomStream).calculateDiskPosition(entry.entry.getDiskNumberStart(), 
dataStart);
+        if (outputStream instanceof ZipSplitOutputStream) {
+            dataStart = ((ZipSplitOutputStream) 
outputStream).calculateDiskPosition(entry.entry.getDiskNumberStart(), 
dataStart);
         }
 
         long position = dataStart;
-        randomStream.writeAll(ZipLong.getBytes(entry.entry.getCrc()), 
position); position += ZipConstants.WORD;
+        outputStream.writeAll(ZipLong.getBytes(entry.entry.getCrc()), 
position); position += ZipConstants.WORD;
         if (!hasZip64Extra(entry.entry) || !actuallyNeedsZip64) {
-            
randomStream.writeAll(ZipLong.getBytes(entry.entry.getCompressedSize()), 
position); position += ZipConstants.WORD;
-            randomStream.writeAll(ZipLong.getBytes(entry.entry.getSize()), 
position);
+            
outputStream.writeAll(ZipLong.getBytes(entry.entry.getCompressedSize()), 
position); position += ZipConstants.WORD;
+            outputStream.writeAll(ZipLong.getBytes(entry.entry.getSize()), 
position);
         } else {
-            randomStream.writeAll(ZipLong.ZIP64_MAGIC.getBytes(), position); 
position += ZipConstants.WORD;
-            randomStream.writeAll(ZipLong.ZIP64_MAGIC.getBytes(), position);
+            outputStream.writeAll(ZipLong.ZIP64_MAGIC.getBytes(), position); 
position += ZipConstants.WORD;
+            outputStream.writeAll(ZipLong.ZIP64_MAGIC.getBytes(), position);
         }
         position += ZipConstants.WORD;
 
@@ -1267,14 +1267,14 @@ private void rewriteSizesAndCrc(final boolean 
actuallyNeedsZip64) throws IOExcep
             position = dataStart + 3 * ZipConstants.WORD + 2 * 
ZipConstants.SHORT + nameLen + 2 * ZipConstants.SHORT;
             // inside the ZIP64 extra uncompressed size comes
             // first, unlike the LFH, CD or data descriptor
-            
randomStream.writeAll(ZipEightByteInteger.getBytes(entry.entry.getSize()), 
position); position += ZipConstants.DWORD;
-            
randomStream.writeAll(ZipEightByteInteger.getBytes(entry.entry.getCompressedSize()),
 position); position += ZipConstants.DWORD;
+            
outputStream.writeAll(ZipEightByteInteger.getBytes(entry.entry.getSize()), 
position); position += ZipConstants.DWORD;
+            
outputStream.writeAll(ZipEightByteInteger.getBytes(entry.entry.getCompressedSize()),
 position); position += ZipConstants.DWORD;
 
             if (!actuallyNeedsZip64) {
                 // do some cleanup:
                 // * rewrite version needed to extract
                 position = dataStart - 5 * ZipConstants.SHORT;
-                
randomStream.writeAll(ZipShort.getBytes(versionNeededToExtract(entry.entry.getMethod(),
 false, false)), position);
+                
outputStream.writeAll(ZipShort.getBytes(versionNeededToExtract(entry.entry.getMethod(),
 false, false)), position);
                 position += ZipConstants.SHORT;
 
                 // * remove ZIP64 extra, so it doesn't get written
diff --git 
a/src/test/java/org/apache/commons/compress/archivers/zip/FileRandomAccessOutputStreamTest.java
 
b/src/test/java/org/apache/commons/compress/archivers/zip/FileRandomAccessOutputStreamTest.java
index 754f7967b..92cc97d54 100644
--- 
a/src/test/java/org/apache/commons/compress/archivers/zip/FileRandomAccessOutputStreamTest.java
+++ 
b/src/test/java/org/apache/commons/compress/archivers/zip/FileRandomAccessOutputStreamTest.java
@@ -95,7 +95,7 @@ public void testWriteFullyAt_whenFullAtOnce_thenSucceed() 
throws IOException {
         verify(channel, times(1)).write((ByteBuffer) any(), eq(20L));
         verify(channel, times(1)).write((ByteBuffer) any(), eq(30L));
 
-        assertEquals(0, stream.position());
+        assertEquals(11, stream.position());
     }
 
     @Test
@@ -121,7 +121,7 @@ public void 
testWriteFullyAt_whenFullButPartial_thenSucceed() throws IOException
         verify(channel, times(1)).write((ByteBuffer) any(), eq(23L));
         verify(channel, times(1)).write((ByteBuffer) any(), eq(30L));
 
-        assertEquals(0, stream.position());
+        assertEquals(11, stream.position());
     }
 
     @Test

Reply via email to