On Fri, 15 Dec 2023 16:30:01 GMT, Archie Cobbs <[email protected]> wrote:
>> `GZIPInputStream`, when looking for a concatenated stream, relies on what
>> the underlying `InputStream` says is how many bytes are `available()`. But
>> this is inappropriate because `InputStream.available()` is just an estimate
>> and is allowed (for example) to always return zero.
>>
>> The fix is to ignore what's `available()` and just proceed and see what
>> happens. If fewer bytes are available than required, the attempt to extend
>> to another stream is canceled just as it was before, e.g., when the next
>> stream header couldn't be read.
>
> Archie Cobbs has updated the pull request incrementally with one additional
> commit since the last revision:
>
> Address second round of review comments.
The test is shaping up nicely. Since it's a new test it should use JUnit 5.
Also included a couple suggestions, I'll stop now, promise! :)
test/jdk/java/util/zip/GZIP/GZIPInputStreamAvailable.java line 30:
> 28: */
> 29:
> 30: import org.junit.Test;
Let's use JUnit 5:
Suggestion:
import org.junit.jupiter.api.Test;
test/jdk/java/util/zip/GZIP/GZIPInputStreamAvailable.java line 36:
> 34: import java.util.zip.*;
> 35:
> 36: import static org.junit.Assert.assertArrayEquals;
Let's use JUnit 5:
Suggestion:
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
test/jdk/java/util/zip/GZIP/GZIPInputStreamAvailable.java line 53:
> 51: byte[] compressedN = repeat(compressed1, NUM_COPIES);
> 52:
> 53: // (a) Read back copied compressed data from a stream where
> available() is accurate and verify
Suggestion:
// (a) Read back inflated data from a stream where available() is
accurate and verify
test/jdk/java/util/zip/GZIP/GZIPInputStreamAvailable.java line 54:
> 52:
> 53: // (a) Read back copied compressed data from a stream where
> available() is accurate and verify
> 54: byte[] readback1 = new GZIPInputStream(new
> ByteArrayInputStream(compressedN)).readAllBytes();
These readback lines got rather long. Perhaps consider extracting the GZIP
reading into a method taking the source InputStream as a parameter?
Suggestion:
byte[] readback1 = inflateFrom(new ByteArrayInputStream(compressedN));
test/jdk/java/util/zip/GZIP/GZIPInputStreamAvailable.java line 57:
> 55: assertArrayEquals(uncompressedN, readback1);
> 56:
> 57: // (b) Read back copied compressed data from a stream where
> available() always returns zero and verify
Suggestion:
// (b) Read back inflated data from a stream where available() always
returns zero and verify
test/jdk/java/util/zip/GZIP/GZIPInputStreamAvailable.java line 58:
> 56:
> 57: // (b) Read back copied compressed data from a stream where
> available() always returns zero and verify
> 58: byte[] readback2 = new GZIPInputStream(new
> ZeroAvailableStream(new ByteArrayInputStream(compressedN))).readAllBytes();
Suggestion:
byte[] readback2 = inflateFrom(new ZeroAvailableStream(new
ByteArrayInputStream(compressedN)));
-------------
PR Review: https://git.openjdk.org/jdk/pull/17113#pullrequestreview-1784857282
PR Review Comment: https://git.openjdk.org/jdk/pull/17113#discussion_r1428434843
PR Review Comment: https://git.openjdk.org/jdk/pull/17113#discussion_r1428435461
PR Review Comment: https://git.openjdk.org/jdk/pull/17113#discussion_r1428452384
PR Review Comment: https://git.openjdk.org/jdk/pull/17113#discussion_r1428455030
PR Review Comment: https://git.openjdk.org/jdk/pull/17113#discussion_r1428452815
PR Review Comment: https://git.openjdk.org/jdk/pull/17113#discussion_r1428456971