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 <[email protected]>
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());
+ }
+ }
+
}