This is an automated email from the ASF dual-hosted git repository.

bodewig 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 f8a4a3e  simplify readEncodedHeader a bit
f8a4a3e is described below

commit f8a4a3ef5c455e80a25d6d6e00904ae9a54546b2
Author: Stefan Bodewig <bode...@apache.org>
AuthorDate: Sat May 22 16:48:40 2021 +0200

    simplify readEncodedHeader a bit
---
 .../commons/compress/archivers/sevenz/SevenZFile.java       | 13 +++++++------
 1 file changed, 7 insertions(+), 6 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 b0b5abf..0fe9da9 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
@@ -671,10 +671,10 @@ public class SevenZFile implements Closeable {
 
         readStreamsInfo(header, archive);
 
-        if (archive.folders.length == 0) {
+        if (archive.folders == null || archive.folders.length == 0) {
             throw new IOException("no folders, can't read encoded header");
         }
-        if (archive.packSizes.length == 0) {
+        if (archive.packSizes == null || archive.packSizes.length == 0) {
             throw new IOException("no packed streams, can't read encoded 
header");
         }
 
@@ -698,11 +698,12 @@ public class SevenZFile implements Closeable {
             inputStreamStack = new CRC32VerifyingInputStream(inputStreamStack,
                     folder.getUnpackSize(), folder.crc);
         }
-        assertFitsIntoNonNegativeInt("unpackSize", folder.getUnpackSize());
-        final byte[] nextHeader = new byte[(int)folder.getUnpackSize()];
-        try (DataInputStream nextHeaderInputStream = new 
DataInputStream(inputStreamStack)) {
-            nextHeaderInputStream.readFully(nextHeader);
+        final int unpackSize = assertFitsIntoNonNegativeInt("unpackSize", 
folder.getUnpackSize());
+        final byte[] nextHeader = new byte[unpackSize];
+        if (IOUtils.readFully(inputStreamStack, nextHeader) < unpackSize) {
+            throw new IOException("premature end of stream");
         }
+        inputStreamStack.close();
         return ByteBuffer.wrap(nextHeader).order(ByteOrder.LITTLE_ENDIAN);
     }
 

Reply via email to