plug a few more native memory leaks
aftermaths of COMPRESS-343, inspired by #11
diff --git a/src/main/java/org/apache/commons/compress/archivers/dump/TapeInputStream.java b/src/main/java/org/apache/commons/compress/archivers/dump/TapeInputStream.java
index 7564823..3534805 100644
--- a/src/main/java/org/apache/commons/compress/archivers/dump/TapeInputStream.java
+++ b/src/main/java/org/apache/commons/compress/archivers/dump/TapeInputStream.java
@@ -294,18 +294,18 @@
0x03)) {
case ZLIB:
+ Inflater inflator = new Inflater();
try {
- Inflater inflator = new Inflater();
inflator.setInput(compBuffer, 0, compBuffer.length);
length = inflator.inflate(blockBuffer);
if (length != blockSize) {
throw new ShortFileException();
}
-
- inflator.end();
} catch (DataFormatException e) {
throw new DumpArchiveException("bad data", e);
+ } finally {
+ inflator.end();
}
break;
diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
index 2f7894a..584aa4a 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
@@ -519,8 +519,11 @@
public void close() throws IOException {
if (!closed) {
closed = true;
- in.close();
- inf.end();
+ try {
+ in.close();
+ } finally {
+ inf.end();
+ }
}
}
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 51fe771..31444d7 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
@@ -420,8 +420,11 @@
return new InflaterInputStream(bis, inflater) {
@Override
public void close() throws IOException {
- super.close();
- inflater.end();
+ try {
+ super.close();
+ } finally {
+ inflater.end();
+ }
}
};
case BZIP2:
diff --git a/src/main/java/org/apache/commons/compress/compressors/deflate/DeflateCompressorInputStream.java b/src/main/java/org/apache/commons/compress/compressors/deflate/DeflateCompressorInputStream.java
index d4fec63..f7b8dd0 100644
--- a/src/main/java/org/apache/commons/compress/compressors/deflate/DeflateCompressorInputStream.java
+++ b/src/main/java/org/apache/commons/compress/compressors/deflate/DeflateCompressorInputStream.java
@@ -37,6 +37,7 @@
private static final int MAGIC_2d = 0xda;
private final InputStream in;
+ private final Inflater inflater;
/**
* Creates a new input stream that decompresses Deflate-compressed data
@@ -58,7 +59,8 @@
*/
public DeflateCompressorInputStream(InputStream inputStream,
DeflateParameters parameters) {
- in = new InflaterInputStream(inputStream, new Inflater(!parameters.withZlibHeader()));
+ inflater = new Inflater(!parameters.withZlibHeader());
+ in = new InflaterInputStream(inputStream, inflater);
}
/** {@inheritDoc} */
@@ -92,7 +94,11 @@
/** {@inheritDoc} */
@Override
public void close() throws IOException {
- in.close();
+ try {
+ in.close();
+ } finally {
+ inflater.end();
+ }
}
/**
diff --git a/src/main/java/org/apache/commons/compress/compressors/deflate/DeflateCompressorOutputStream.java b/src/main/java/org/apache/commons/compress/compressors/deflate/DeflateCompressorOutputStream.java
index 3714fe4..e978a57 100644
--- a/src/main/java/org/apache/commons/compress/compressors/deflate/DeflateCompressorOutputStream.java
+++ b/src/main/java/org/apache/commons/compress/compressors/deflate/DeflateCompressorOutputStream.java
@@ -31,7 +31,8 @@
*/
public class DeflateCompressorOutputStream extends CompressorOutputStream {
private final DeflaterOutputStream out;
-
+ private final Deflater deflater;
+
/**
* Creates a Deflate compressed output stream with the default parameters.
* @param outputStream the stream to wrap
@@ -49,7 +50,8 @@
*/
public DeflateCompressorOutputStream(OutputStream outputStream,
DeflateParameters parameters) throws IOException {
- this.out = new DeflaterOutputStream(outputStream, new Deflater(parameters.getCompressionLevel(), !parameters.withZlibHeader()));
+ this.deflater = new Deflater(parameters.getCompressionLevel(), !parameters.withZlibHeader());
+ this.out = new DeflaterOutputStream(outputStream, deflater);
}
@Override
@@ -83,6 +85,10 @@
@Override
public void close() throws IOException {
- out.close();
+ try {
+ out.close();
+ } finally {
+ deflater.end();
+ }
}
}