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 c24ac00 remove some redundant tests of the read phase that have been
checked earlier
c24ac00 is described below
commit c24ac00d27f2347250fadf1db92ed516a6576e0d
Author: Stefan Bodewig <[email protected]>
AuthorDate: Sun Jun 27 15:28:34 2021 +0200
remove some redundant tests of the read phase that have been checked earlier
---
.../compress/archivers/sevenz/SevenZFile.java | 101 ++-------------------
1 file changed, 7 insertions(+), 94 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 d84ab5e..967d6e9 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
@@ -601,10 +601,6 @@ public class SevenZFile implements Closeable {
readFilesInfo(header, archive);
nid = getUnsignedByte(header);
}
-
- if (nid != NID.kEnd) {
- throw new IOException("Badly terminated header, found " + nid);
- }
}
private ArchiveStatistics sanityCheckAndCollectStatistics(final ByteBuffer
header)
@@ -755,10 +751,6 @@ public class SevenZFile implements Closeable {
readSubStreamsInfo(header, archive);
nid = getUnsignedByte(header);
}
-
- if (nid != NID.kEnd) {
- throw new IOException("Badly terminated StreamsInfo");
- }
}
private void sanityCheckPackInfo(final ByteBuffer header, final
ArchiveStatistics stats) throws IOException {
@@ -801,9 +793,7 @@ public class SevenZFile implements Closeable {
private void readPackInfo(final ByteBuffer header, final Archive archive)
throws IOException {
archive.packPos = readUint64(header);
- final long numPackStreams = readUint64(header);
- assertFitsIntoNonNegativeInt("numPackStreams", numPackStreams);
- final int numPackStreamsInt = (int) numPackStreams;
+ final int numPackStreamsInt = (int) readUint64(header);
int nid = getUnsignedByte(header);
if (nid == NID.kSize) {
archive.packSizes = new long[numPackStreamsInt];
@@ -824,10 +814,6 @@ public class SevenZFile implements Closeable {
nid = getUnsignedByte(header);
}
-
- if (nid != NID.kEnd) {
- throw new IOException("Badly terminated PackInfo (" + nid + ")");
- }
}
private void sanityCheckUnpackInfo(final ByteBuffer header, final
ArchiveStatistics stats)
@@ -885,26 +871,15 @@ public class SevenZFile implements Closeable {
private void readUnpackInfo(final ByteBuffer header, final Archive
archive) throws IOException {
int nid = getUnsignedByte(header);
- if (nid != NID.kFolder) {
- throw new IOException("Expected kFolder, got " + nid);
- }
- final long numFolders = readUint64(header);
- assertFitsIntoNonNegativeInt("numFolders", numFolders);
- final int numFoldersInt = (int) numFolders;
+ final int numFoldersInt = (int) readUint64(header);
final Folder[] folders = new Folder[numFoldersInt];
archive.folders = folders;
final int external = getUnsignedByte(header);
- if (external != 0) {
- throw new IOException("External unsupported");
- }
for (int i = 0; i < numFoldersInt; i++) {
folders[i] = readFolder(header);
}
nid = getUnsignedByte(header);
- if (nid != NID.kCodersUnpackSize) {
- throw new IOException("Expected kCodersUnpackSize, got " + nid);
- }
for (final Folder folder : folders) {
assertFitsIntoNonNegativeInt("totalOutputStreams",
folder.totalOutputStreams);
folder.unpackSizes = new long[(int)folder.totalOutputStreams];
@@ -927,10 +902,6 @@ public class SevenZFile implements Closeable {
nid = getUnsignedByte(header);
}
-
- if (nid != NID.kEnd) {
- throw new IOException("Badly terminated UnpackInfo");
- }
}
private void sanityCheckSubStreamsInfo(final ByteBuffer header, final
ArchiveStatistics stats) throws IOException {
@@ -954,13 +925,11 @@ public class SevenZFile implements Closeable {
if (numUnpackSubStreams == 0) {
continue;
}
- long sum = 0;
for (int i = 0; i < numUnpackSubStreams - 1; i++) {
final long size = readUint64(header);
if (size < 0) {
throw new IOException("negative unpackSize");
}
- sum += size;
}
}
nid = getUnsignedByte(header);
@@ -1006,15 +975,13 @@ public class SevenZFile implements Closeable {
unpackStreamsCount = 0;
for (final Folder folder : archive.folders) {
final long numStreams = readUint64(header);
- assertFitsIntoNonNegativeInt("numStreams", numStreams);
folder.numUnpackSubStreams = (int)numStreams;
unpackStreamsCount += numStreams;
}
nid = getUnsignedByte(header);
}
- final int totalUnpackStreams =
- assertFitsIntoNonNegativeInt("totalUnpackStreams",
unpackStreamsCount);
+ final int totalUnpackStreams = (int) unpackStreamsCount;
final SubStreamsInfo subStreamsInfo = new SubStreamsInfo();
subStreamsInfo.unpackSizes = new long[totalUnpackStreams];
subStreamsInfo.hasCrc = new BitSet(totalUnpackStreams);
@@ -1050,7 +1017,6 @@ public class SevenZFile implements Closeable {
}
if (nid == NID.kCRC) {
- assertFitsIntoNonNegativeInt("numDigests", numDigests);
final BitSet hasMissingCrc = readAllOrBits(header, numDigests);
final long[] missingCrcs = new long[numDigests];
for (int i = 0; i < numDigests; i++) {
@@ -1078,10 +1044,6 @@ public class SevenZFile implements Closeable {
nid = getUnsignedByte(header);
}
- if (nid != NID.kEnd) {
- throw new IOException("Badly terminated SubStreamsInfo");
- }
-
archive.subStreamsInfo = subStreamsInfo;
}
@@ -1178,7 +1140,6 @@ public class SevenZFile implements Closeable {
final Folder folder = new Folder();
final long numCoders = readUint64(header);
- assertFitsIntoNonNegativeInt("numCoders", numCoders);
final Coder[] coders = new Coder[(int)numCoders];
long totalInStreams = 0;
long totalOutStreams = 0;
@@ -1203,7 +1164,6 @@ public class SevenZFile implements Closeable {
totalOutStreams += coders[i].numOutStreams;
if (hasAttributes) {
final long propertiesSize = readUint64(header);
- assertFitsIntoNonNegativeInt("propertiesSize", propertiesSize);
coders[i].properties = new byte[(int)propertiesSize];
get(header, coders[i].properties);
}
@@ -1214,16 +1174,10 @@ public class SevenZFile implements Closeable {
}
}
folder.coders = coders;
- assertFitsIntoNonNegativeInt("totalInStreams", totalInStreams);
folder.totalInputStreams = totalInStreams;
- assertFitsIntoNonNegativeInt("totalOutStreams", totalOutStreams);
folder.totalOutputStreams = totalOutStreams;
- if (totalOutStreams == 0) {
- throw new IOException("Total output streams can't be 0");
- }
final long numBindPairs = totalOutStreams - 1;
- assertFitsIntoNonNegativeInt("numBindPairs", numBindPairs);
final BindPair[] bindPairs = new BindPair[(int)numBindPairs];
for (int i = 0; i < bindPairs.length; i++) {
bindPairs[i] = new BindPair();
@@ -1232,11 +1186,7 @@ public class SevenZFile implements Closeable {
}
folder.bindPairs = bindPairs;
- if (totalInStreams < numBindPairs) {
- throw new IOException("Total input streams can't be less than the
number of bind pairs");
- }
final long numPackedStreams = totalInStreams - numBindPairs;
- assertFitsIntoNonNegativeInt("numPackedStreams", numPackedStreams);
final long[] packedStreams = new long[(int)numPackedStreams];
if (numPackedStreams == 1) {
int i;
@@ -1245,9 +1195,6 @@ public class SevenZFile implements Closeable {
break;
}
}
- if (i == (int)totalInStreams) {
- throw new IOException("Couldn't find stream's bind pair
index");
- }
packedStreams[0] = i;
} else {
for (int i = 0; i < (int)numPackedStreams; i++) {
@@ -1415,9 +1362,7 @@ public class SevenZFile implements Closeable {
}
private void readFilesInfo(final ByteBuffer header, final Archive archive)
throws IOException {
- final long numFiles = readUint64(header);
- assertFitsIntoNonNegativeInt("numFiles", numFiles);
- final int numFilesInt = (int) numFiles;
+ final int numFilesInt = (int) readUint64(header);;
final Map<Integer, SevenZArchiveEntry> fileMap = new HashMap<>();
BitSet isEmptyStream = null;
BitSet isEmptyFile = null;
@@ -1434,28 +1379,15 @@ public class SevenZFile implements Closeable {
break;
}
case NID.kEmptyFile: {
- if (isEmptyStream == null) { // protect against NPE
- throw new IOException("Header format error:
kEmptyStream must appear before kEmptyFile");
- }
isEmptyFile = readBits(header,
isEmptyStream.cardinality());
break;
}
case NID.kAnti: {
- if (isEmptyStream == null) { // protect against NPE
- throw new IOException("Header format error:
kEmptyStream must appear before kAnti");
- }
isAnti = readBits(header, isEmptyStream.cardinality());
break;
}
case NID.kName: {
final int external = getUnsignedByte(header);
- if (external != 0) {
- throw new IOException("Not implemented");
- }
- if (((size - 1) & 1) != 0) {
- throw new IOException("File names length invalid");
- }
- assertFitsIntoNonNegativeInt("file names length", size -
1);
final byte[] names = new byte[(int) (size - 1)];
final int namesLength = names.length;
get(header, names);
@@ -1469,7 +1401,7 @@ public class SevenZFile implements Closeable {
nextFile++;
}
}
- if (nextName != namesLength || nextFile != numFiles) {
+ if (nextName != namesLength || nextFile != numFilesInt) {
throw new IOException("Error parsing file names");
}
break;
@@ -1477,9 +1409,6 @@ public class SevenZFile implements Closeable {
case NID.kCTime: {
final BitSet timesDefined = readAllOrBits(header,
numFilesInt);
final int external = getUnsignedByte(header);
- if (external != 0) {
- throw new IOException("Unimplemented");
- }
for (int i = 0; i < numFilesInt; i++) {
checkEntryIsInitialized(fileMap, i);
final SevenZArchiveEntry entryAtIndex = fileMap.get(i);
@@ -1493,9 +1422,6 @@ public class SevenZFile implements Closeable {
case NID.kATime: {
final BitSet timesDefined = readAllOrBits(header,
numFilesInt);
final int external = getUnsignedByte(header);
- if (external != 0) {
- throw new IOException("Unimplemented");
- }
for (int i = 0; i < numFilesInt; i++) {
checkEntryIsInitialized(fileMap, i);
final SevenZArchiveEntry entryAtIndex = fileMap.get(i);
@@ -1509,9 +1435,6 @@ public class SevenZFile implements Closeable {
case NID.kMTime: {
final BitSet timesDefined = readAllOrBits(header,
numFilesInt);
final int external = getUnsignedByte(header);
- if (external != 0) {
- throw new IOException("Unimplemented");
- }
for (int i = 0; i < numFilesInt; i++) {
checkEntryIsInitialized(fileMap, i);
final SevenZArchiveEntry entryAtIndex = fileMap.get(i);
@@ -1525,9 +1448,6 @@ public class SevenZFile implements Closeable {
case NID.kWinAttributes: {
final BitSet attributesDefined = readAllOrBits(header,
numFilesInt);
final int external = getUnsignedByte(header);
- if (external != 0) {
- throw new IOException("Unimplemented");
- }
for (int i = 0; i < numFilesInt; i++) {
checkEntryIsInitialized(fileMap, i);
final SevenZArchiveEntry entryAtIndex = fileMap.get(i);
@@ -1538,24 +1458,17 @@ public class SevenZFile implements Closeable {
}
break;
}
- case NID.kStartPos: {
- throw new IOException("kStartPos is unsupported, please
report");
- }
case NID.kDummy: {
// 7z 9.20 asserts the content is all zeros and ignores
the property
// Compress up to 1.8.1 would throw an exception, now we
ignore it (see COMPRESS-287
- if (skipBytesFully(header, size) < size) {
- throw new IOException("Incomplete kDummy property");
- }
+ skipBytesFully(header, size);
break;
}
default: {
// Compress up to 1.8.1 would throw an exception, now we
ignore it (see COMPRESS-287
- if (skipBytesFully(header, size) < size) {
- throw new IOException("Incomplete property of type " +
propertyType);
- }
+ skipBytesFully(header, size);
break;
}
}