COMPRESS-380 allow underlying stream to outlive HuffmanDecoder
Project: http://git-wip-us.apache.org/repos/asf/commons-compress/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-compress/commit/aed74ea0 Tree: http://git-wip-us.apache.org/repos/asf/commons-compress/tree/aed74ea0 Diff: http://git-wip-us.apache.org/repos/asf/commons-compress/diff/aed74ea0 Branch: refs/heads/master Commit: aed74ea03276362cd301a36787774843ebd4f70c Parents: 5d0b71f Author: Stefan Bodewig <bode...@apache.org> Authored: Fri Jan 5 13:29:40 2018 +0100 Committer: Stefan Bodewig <bode...@apache.org> Committed: Fri Jan 5 13:29:40 2018 +0100 ---------------------------------------------------------------------- .../deflate64/Deflate64CompressorInputStream.java | 12 +++++++++++- .../compress/compressors/deflate64/HuffmanDecoder.java | 3 +-- 2 files changed, 12 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-compress/blob/aed74ea0/src/main/java/org/apache/commons/compress/compressors/deflate64/Deflate64CompressorInputStream.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/compress/compressors/deflate64/Deflate64CompressorInputStream.java b/src/main/java/org/apache/commons/compress/compressors/deflate64/Deflate64CompressorInputStream.java index 88b2142..369fa8d 100644 --- a/src/main/java/org/apache/commons/compress/compressors/deflate64/Deflate64CompressorInputStream.java +++ b/src/main/java/org/apache/commons/compress/compressors/deflate64/Deflate64CompressorInputStream.java @@ -29,6 +29,7 @@ import static org.apache.commons.compress.utils.IOUtils.closeQuietly; * @since 1.16 */ public class Deflate64CompressorInputStream extends CompressorInputStream { + private InputStream originalStream; private HuffmanDecoder decoder; /** @@ -38,6 +39,7 @@ public class Deflate64CompressorInputStream extends CompressorInputStream { */ public Deflate64CompressorInputStream(InputStream in) { this(new HuffmanDecoder(in)); + originalStream = in; } Deflate64CompressorInputStream(HuffmanDecoder decoder) { @@ -75,7 +77,7 @@ public class Deflate64CompressorInputStream extends CompressorInputStream { read = decoder.decode(b, off, len); count(read); if (read == -1) { - close(); + closeDecoder(); } } return read; @@ -88,6 +90,14 @@ public class Deflate64CompressorInputStream extends CompressorInputStream { @Override public void close() throws IOException { + closeDecoder(); + if (originalStream != null) { + originalStream.close(); + originalStream = null; + } + } + + private void closeDecoder() throws IOException { closeQuietly(decoder); decoder = null; } http://git-wip-us.apache.org/repos/asf/commons-compress/blob/aed74ea0/src/main/java/org/apache/commons/compress/compressors/deflate64/HuffmanDecoder.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/compress/compressors/deflate64/HuffmanDecoder.java b/src/main/java/org/apache/commons/compress/compressors/deflate64/HuffmanDecoder.java index 04ec7f9..f74c7de 100644 --- a/src/main/java/org/apache/commons/compress/compressors/deflate64/HuffmanDecoder.java +++ b/src/main/java/org/apache/commons/compress/compressors/deflate64/HuffmanDecoder.java @@ -27,7 +27,6 @@ import java.nio.ByteOrder; import java.util.Arrays; import static org.apache.commons.compress.compressors.deflate64.HuffmanState.*; -import static org.apache.commons.compress.utils.IOUtils.closeQuietly; class HuffmanDecoder implements Closeable { /** @@ -119,7 +118,7 @@ class HuffmanDecoder implements Closeable { @Override public void close() { - closeQuietly(reader); + state = new InitialState(); reader = null; }