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


The following commit(s) were added to refs/heads/master by this push:
     new 8690f549b Deprecate ChecksumCalculatingInputStream in favor of 
java.util.zip.CheckedInputStream
8690f549b is described below

commit 8690f549beb52ab49bf8bf778f2c4da9670346b4
Author: Gary Gregory <garydgreg...@gmail.com>
AuthorDate: Thu Dec 28 10:30:22 2023 -0500

    Deprecate ChecksumCalculatingInputStream in favor of
    java.util.zip.CheckedInputStream
---
 src/changes/changes.xml                            |  1 +
 .../lz4/FramedLZ4CompressorInputStream.java        |  4 +-
 .../utils/ChecksumCalculatingInputStream.java      | 64 ++++++----------------
 .../utils/ChecksumCalculatingInputStreamTest.java  | 57 ++++++++++++++++++-
 4 files changed, 75 insertions(+), 51 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index e4f490ef6..c5fc299c8 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -61,6 +61,7 @@ The <action> type attribute can be add,update,fix,remove.
       <action type="fix" dev="ggregory" due-to="Gary Gregory">Reuse 
Arrays.equals(byte[], byte[]) and deprecate ArchiveUtils.isEqual(byte[], 
byte[]).</action>
       <action type="fix" dev="ggregory" due-to="alumi, Gary Gregory">Add a 
null-check for the class loader of OsgiUtils #451.</action>
       <action type="fix" dev="ggregory" due-to="alumi, Gary Gregory">Add a 
null-check in Pack200.newInstance(String, String).</action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">Deprecate 
ChecksumCalculatingInputStream in favor of 
java.util.zip.CheckedInputStream.</action>
       <!--  UPDATE -->
       <action type="update" dev="ggregory" due-to="Gary Gregory">Bump 
commons-lang3 from 3.13.0 to 3.14.0.</action>
       <action type="update" dev="ggregory" due-to="Dependabot">Bump 
com.github.marschall:memoryfilesystem from 2.6.1 to 2.7.0 #444.</action>
diff --git 
a/src/main/java/org/apache/commons/compress/compressors/lz4/FramedLZ4CompressorInputStream.java
 
b/src/main/java/org/apache/commons/compress/compressors/lz4/FramedLZ4CompressorInputStream.java
index 387bddc6b..dc93a04c7 100644
--- 
a/src/main/java/org/apache/commons/compress/compressors/lz4/FramedLZ4CompressorInputStream.java
+++ 
b/src/main/java/org/apache/commons/compress/compressors/lz4/FramedLZ4CompressorInputStream.java
@@ -21,11 +21,11 @@ package org.apache.commons.compress.compressors.lz4;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Arrays;
+import java.util.zip.CheckedInputStream;
 
 import org.apache.commons.compress.compressors.CompressorInputStream;
 import org.apache.commons.compress.utils.BoundedInputStream;
 import org.apache.commons.compress.utils.ByteUtils;
-import org.apache.commons.compress.utils.ChecksumCalculatingInputStream;
 import org.apache.commons.compress.utils.IOUtils;
 import org.apache.commons.compress.utils.InputStreamStatistics;
 import org.apache.commons.io.input.CountingInputStream;
@@ -210,7 +210,7 @@ public class FramedLZ4CompressorInputStream extends 
CompressorInputStream implem
         }
         InputStream capped = new BoundedInputStream(inputStream, realLen);
         if (expectBlockChecksum) {
-            capped = new ChecksumCalculatingInputStream(blockHash, capped);
+            capped = new CheckedInputStream(capped, blockHash);
         }
         if (uncompressed) {
             inUncompressed = true;
diff --git 
a/src/main/java/org/apache/commons/compress/utils/ChecksumCalculatingInputStream.java
 
b/src/main/java/org/apache/commons/compress/utils/ChecksumCalculatingInputStream.java
index 71834c73f..3d7bf3369 100644
--- 
a/src/main/java/org/apache/commons/compress/utils/ChecksumCalculatingInputStream.java
+++ 
b/src/main/java/org/apache/commons/compress/utils/ChecksumCalculatingInputStream.java
@@ -16,10 +16,9 @@
  */
 package org.apache.commons.compress.utils;
 
-import java.io.FilterInputStream;
-import java.io.IOException;
 import java.io.InputStream;
 import java.util.Objects;
+import java.util.zip.CheckedInputStream;
 import java.util.zip.Checksum;
 
 /**
@@ -27,62 +26,33 @@ import java.util.zip.Checksum;
  *
  * @NotThreadSafe
  * @since 1.14
+ * @deprecated Use {@link CheckedInputStream}.
  */
-public class ChecksumCalculatingInputStream extends FilterInputStream {
-    private final Checksum checksum;
+@Deprecated
+public class ChecksumCalculatingInputStream extends CheckedInputStream {
 
+    /**
+     * Constructs a new instance.
+     *
+     * @param checksum    The checksum to update
+     * @param inputStream The input stream to read.
+     * @deprecated Use {@link 
CheckedInputStream#CheckedInputStream(InputStream, Checksum)}.
+     */
+    @Deprecated
+    @SuppressWarnings("resource")
     public ChecksumCalculatingInputStream(final Checksum checksum, final 
InputStream inputStream) {
-        super(Objects.requireNonNull(inputStream, "inputStream"));
-        this.checksum = Objects.requireNonNull(checksum, "checksum");
+        super(Objects.requireNonNull(inputStream, "inputStream"), 
Objects.requireNonNull(checksum, "checksum"));
     }
 
     /**
      * Returns the calculated checksum.
      *
      * @return the calculated checksum.
+     * @deprecated Use {@link CheckedInputStream#getChecksum()} and {@link 
Checksum#getValue()}.
      */
+    @Deprecated
     public long getValue() {
-        return checksum.getValue();
-    }
-
-    /**
-     * Reads a single byte from the stream
-     *
-     * @throws IOException if the underlying stream throws or the stream is 
exhausted and the Checksum doesn't match the expected value
-     */
-    @Override
-    public int read() throws IOException {
-        final int data = in.read();
-        if (data >= 0) {
-            checksum.update(data);
-        }
-        return data;
-    }
-
-    /**
-     * Reads from the stream into a byte array.
-     *
-     * @throws IOException if the underlying stream throws or the stream is 
exhausted and the Checksum doesn't match the expected value
-     */
-    @Override
-    public int read(final byte[] b, final int off, final int len) throws 
IOException {
-        if (len == 0) {
-            return 0;
-        }
-        final int readCount = in.read(b, off, len);
-        if (readCount >= 0) {
-            checksum.update(b, off, readCount);
-        }
-        return readCount;
-    }
-
-    @Override
-    public long skip(final long n) throws IOException {
-        // Can't really skip, we have to hash everything to verify the checksum
-        if (read() >= 0) {
-            return 1;
-        }
-        return 0;
+        return getChecksum().getValue();
     }
 
 }
diff --git 
a/src/test/java/org/apache/commons/compress/utils/ChecksumCalculatingInputStreamTest.java
 
b/src/test/java/org/apache/commons/compress/utils/ChecksumCalculatingInputStreamTest.java
index 6463b1e4d..28d3d04a2 100644
--- 
a/src/test/java/org/apache/commons/compress/utils/ChecksumCalculatingInputStreamTest.java
+++ 
b/src/test/java/org/apache/commons/compress/utils/ChecksumCalculatingInputStreamTest.java
@@ -25,6 +25,7 @@ import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.util.zip.Adler32;
 import java.util.zip.CRC32;
+import java.util.zip.CheckedInputStream;
 
 import org.junit.jupiter.api.Test;
 
@@ -63,6 +64,19 @@ public class ChecksumCalculatingInputStreamTest {
         }
     }
 
+    @Test
+    public void testReadTakingByteArraySanityCheck() throws IOException {
+        final Adler32 adler32 = new Adler32();
+        final byte[] byteArray = new byte[6];
+        final ByteArrayInputStream byteArrayInputStream = new 
ByteArrayInputStream(byteArray);
+        try (CheckedInputStream checksumCalculatingInputStream = new 
CheckedInputStream(byteArrayInputStream, adler32)) {
+            final int readResult = 
checksumCalculatingInputStream.read(byteArray);
+            assertEquals(6, readResult);
+            assertEquals(0, byteArrayInputStream.available());
+            assertEquals(393217L, 
checksumCalculatingInputStream.getChecksum().getValue());
+        }
+    }
+
     @Test
     public void testReadTakingNoArguments() throws IOException {
         final Adler32 adler32 = new Adler32();
@@ -79,6 +93,22 @@ public class ChecksumCalculatingInputStreamTest {
         }
     }
 
+    @Test
+    public void testReadTakingNoArgumentsSanityCheck() throws IOException {
+        final Adler32 adler32 = new Adler32();
+        final byte[] byteArray = new byte[6];
+        final ByteArrayInputStream byteArrayInputStream = new 
ByteArrayInputStream(byteArray);
+        final CheckedInputStream checksumCalculatingInputStream = new 
CheckedInputStream(byteArrayInputStream, adler32);
+        try (BufferedInputStream bufferedInputStream = new 
BufferedInputStream(checksumCalculatingInputStream)) {
+            final int inputStreamReadResult = 
bufferedInputStream.read(byteArray, 0, 1);
+            final int checkSumCalculationReadResult = 
checksumCalculatingInputStream.read();
+            assertNotEquals(checkSumCalculationReadResult, 
inputStreamReadResult);
+            assertEquals(-1, checkSumCalculationReadResult);
+            assertEquals(0, byteArrayInputStream.available());
+            assertEquals(393217L, 
checksumCalculatingInputStream.getChecksum().getValue());
+        }
+    }
+
     @Test
     public void testSkipReturningPositive() throws IOException {
         final Adler32 adler32 = new Adler32();
@@ -86,8 +116,20 @@ public class ChecksumCalculatingInputStreamTest {
         final ByteArrayInputStream byteArrayInputStream = new 
ByteArrayInputStream(byteArray);
         try (ChecksumCalculatingInputStream checksumCalculatingInputStream = 
new ChecksumCalculatingInputStream(adler32, byteArrayInputStream)) {
             final long skipResult = checksumCalculatingInputStream.skip((byte) 
0);
-            assertEquals(1L, skipResult);
-            assertEquals(65537L, checksumCalculatingInputStream.getValue());
+            assertEquals(0, skipResult);
+            assertEquals(1, checksumCalculatingInputStream.getValue());
+        }
+    }
+
+    @Test
+    public void testSkipReturningPositiveSanityCheck() throws IOException {
+        final Adler32 adler32 = new Adler32();
+        final byte[] byteArray = new byte[6];
+        final ByteArrayInputStream byteArrayInputStream = new 
ByteArrayInputStream(byteArray);
+        try (CheckedInputStream checksumCalculatingInputStream = new 
CheckedInputStream(byteArrayInputStream, adler32)) {
+            final long skipResult = checksumCalculatingInputStream.skip((byte) 
0);
+            assertEquals(0, skipResult);
+            assertEquals(1, 
checksumCalculatingInputStream.getChecksum().getValue());
         }
     }
 
@@ -102,4 +144,15 @@ public class ChecksumCalculatingInputStreamTest {
         }
     }
 
+    @Test
+    public void testSkipReturningZeroSanityCheck() throws IOException {
+        final Adler32 adler32 = new Adler32();
+        final ByteArrayInputStream byteArrayInputStream = new 
ByteArrayInputStream(ByteUtils.EMPTY_BYTE_ARRAY);
+        try (CheckedInputStream checksumCalculatingInputStream = new 
CheckedInputStream(byteArrayInputStream, adler32)) {
+            final long skipResult = checksumCalculatingInputStream.skip(60L);
+            assertEquals(0L, skipResult);
+            assertEquals(1L, 
checksumCalculatingInputStream.getChecksum().getValue());
+        }
+    }
+
 }

Reply via email to