merge revision 741089 from Ant trunk - fix for various findbugs issues - [SANDBOX-246]
git-svn-id: https://svn.apache.org/repos/asf/commons/sandbox/compress/trunk@741092 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/commons/compress/archivers/tar/TarInputStream.java b/src/main/java/org/apache/commons/compress/archivers/tar/TarInputStream.java
index bf05051..735e7f8 100644
--- a/src/main/java/org/apache/commons/compress/archivers/tar/TarInputStream.java
+++ b/src/main/java/org/apache/commons/compress/archivers/tar/TarInputStream.java
@@ -218,8 +218,13 @@
+ numToSkip + " bytes");
}
- if (numToSkip > 0) {
- skip(numToSkip);
+ while (numToSkip > 0) {
+ long skipped = skip(numToSkip);
+ if (skipped <= 0) {
+ throw new RuntimeException("failed to skip current tar"
+ + " entry");
+ }
+ numToSkip -= skipped;
}
readBuf = null;
diff --git a/src/main/java/org/apache/commons/compress/archivers/tar/TarOutputStream.java b/src/main/java/org/apache/commons/compress/archivers/tar/TarOutputStream.java
index 8587d36..9d93eea 100644
--- a/src/main/java/org/apache/commons/compress/archivers/tar/TarOutputStream.java
+++ b/src/main/java/org/apache/commons/compress/archivers/tar/TarOutputStream.java
@@ -305,7 +305,7 @@
wOffset += numToWrite;
assemLen += numToWrite;
- numToWrite -= numToWrite;
+ numToWrite = 0;
}
}
diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/AsiExtraField.java b/src/main/java/org/apache/commons/compress/archivers/zip/AsiExtraField.java
index f192246..094a198 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/AsiExtraField.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/AsiExtraField.java
@@ -334,4 +334,14 @@
return type | (mode & PERM_MASK);
}
+ public Object clone() {
+ try {
+ AsiExtraField cloned = (AsiExtraField) super.clone();
+ cloned.crc = new CRC32();
+ return cloned;
+ } catch (CloneNotSupportedException cnfe) {
+ // impossible
+ throw new RuntimeException(cnfe);
+ }
+ }
}
diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/UnrecognizedExtraField.java b/src/main/java/org/apache/commons/compress/archivers/zip/UnrecognizedExtraField.java
index 2d146ae..9ddc7a5 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/UnrecognizedExtraField.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/UnrecognizedExtraField.java
@@ -57,7 +57,7 @@
*/
public void setCentralDirectoryData( final byte[] centralData )
{
- m_centralData = centralData;
+ m_centralData = copy(centralData);
}
/**
@@ -77,7 +77,7 @@
*/
public void setLocalFileDataData( final byte[] localData )
{
- m_localData = localData;
+ m_localData = copy(localData);
}
/**
@@ -89,7 +89,7 @@
{
if( m_centralData != null )
{
- return m_centralData;
+ return copy(m_centralData);
}
return getLocalFileDataData();
}
@@ -125,7 +125,7 @@
*/
public byte[] getLocalFileDataData()
{
- return m_localData;
+ return copy(m_localData);
}
/**
@@ -153,4 +153,13 @@
System.arraycopy( buffer, offset, fileData, 0, length );
setLocalFileDataData( fileData );
}
+
+ private static byte[] copy(byte[] from) {
+ if (from != null) {
+ byte[] to = new byte[from.length];
+ System.arraycopy(from, 0, to, 0, to.length);
+ return to;
+ }
+ return null;
+ }
}
diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java b/src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java
index f3e625e..d29e4e7 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java
@@ -344,7 +344,15 @@
nameMap.put(ze.getName(), ze);
- archive.skipBytes(extraLen);
+ int lenToSkip = extraLen;
+ while (lenToSkip > 0) {
+ int skipped = archive.skipBytes(lenToSkip);
+ if (skipped <= 0) {
+ throw new RuntimeException("failed to skip extra data in"
+ + " central directory");
+ }
+ lenToSkip -= skipped;
+ }
byte[] comment = new byte[commentLen];
archive.readFully(comment);
@@ -460,7 +468,15 @@
int fileNameLen = ZipShort.getValue(b);
archive.readFully(b);
int extraFieldLen = ZipShort.getValue(b);
- archive.skipBytes(fileNameLen);
+ int lenToSkip = fileNameLen;
+ while (lenToSkip > 0) {
+ int skipped = archive.skipBytes(lenToSkip);
+ if (skipped <= 0) {
+ throw new RuntimeException("failed to skip file name in"
+ + " local file header");
+ }
+ lenToSkip -= skipped;
+ }
byte[] localExtraData = new byte[extraFieldLen];
archive.readFully(localExtraData);
ze.setExtra(localExtraData);
diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/ZipLong.java b/src/main/java/org/apache/commons/compress/archivers/zip/ZipLong.java
index 01c5f27..5621b00 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/ZipLong.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/ZipLong.java
@@ -146,4 +146,13 @@
public int hashCode() {
return (int) value;
}
+
+ public Object clone() {
+ try {
+ return (ZipLong) super.clone();
+ } catch (CloneNotSupportedException cnfe) {
+ // impossible
+ throw new RuntimeException(cnfe);
+ }
+ }
}
diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/ZipShort.java b/src/main/java/org/apache/commons/compress/archivers/zip/ZipShort.java
index 55cc797..1bda55d 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/ZipShort.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/ZipShort.java
@@ -132,4 +132,13 @@
public int hashCode() {
return value;
}
+
+ public Object clone() {
+ try {
+ return (ZipShort) super.clone();
+ } catch (CloneNotSupportedException cnfe) {
+ // impossible
+ throw new RuntimeException(cnfe);
+ }
+ }
}
diff --git a/src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorOutputStream.java b/src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorOutputStream.java
index a615245..d6deeb9 100644
--- a/src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorOutputStream.java
+++ b/src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorOutputStream.java
@@ -614,7 +614,7 @@
}
if (ge > gs && nPart != nGroups && nPart != 1
- && ((nGroups - nPart) % 2 == 1)) {
+ && ((nGroups - nPart) % 2 != 0)) {
aFreq -= mtfFreq[ge];
ge--;
}
@@ -984,9 +984,7 @@
b = t;
}
if (b > c) {
- t = b;
b = c;
- c = t;
}
if (a > b) {
b = a;
@@ -1031,7 +1029,7 @@
med = med3(block[zptr[lo] + d + 1],
block[zptr[hi ] + d + 1],
- block[zptr[(lo + hi) >> 1] + d + 1]);
+ block[zptr[(lo + hi) >>> 1] + d + 1]);
unLo = ltLo = lo;
unHi = gtHi = hi;