COMPRESS-380 document EOFException and add a test
Project: http://git-wip-us.apache.org/repos/asf/commons-compress/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-compress/commit/f4b75016 Tree: http://git-wip-us.apache.org/repos/asf/commons-compress/tree/f4b75016 Diff: http://git-wip-us.apache.org/repos/asf/commons-compress/diff/f4b75016 Branch: refs/heads/master Commit: f4b750165bc27f6a36bc3abed650e18d474e296b Parents: b97a02c Author: Stefan Bodewig <bode...@apache.org> Authored: Fri Jan 5 11:55:08 2018 +0100 Committer: Stefan Bodewig <bode...@apache.org> Committed: Fri Jan 5 11:55:08 2018 +0100 ---------------------------------------------------------------------- .../Deflate64CompressorInputStream.java | 6 ++++ .../compressors/deflate64/HuffmanDecoder.java | 2 +- .../Deflate64CompressorInputStreamTest.java | 31 ++++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-compress/blob/f4b75016/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 e909f13..88b2142 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 @@ -44,6 +44,9 @@ public class Deflate64CompressorInputStream extends CompressorInputStream { this.decoder = decoder; } + /** + * @throws java.io.EOFException if the underlying stream is exhausted before the end of defalted data was reached. + */ @Override public int read() throws IOException { byte[] b = new byte[1]; @@ -62,6 +65,9 @@ public class Deflate64CompressorInputStream extends CompressorInputStream { } } + /** + * @throws java.io.EOFException if the underlying stream is exhausted before the end of defalted data was reached. + */ @Override public int read(byte[] b, int off, int len) throws IOException { int read = -1; http://git-wip-us.apache.org/repos/asf/commons-compress/blob/f4b75016/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 e96959c..04ec7f9 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 @@ -488,7 +488,7 @@ class HuffmanDecoder implements Closeable { private static long readBits(BitInputStream reader, int numBits) throws IOException { long r = reader.readBits(numBits); if (r == -1) { - throw new EOFException(); + throw new EOFException("Truncated Deflate64 Stream"); } return r; } http://git-wip-us.apache.org/repos/asf/commons-compress/blob/f4b75016/src/test/java/org/apache/commons/compress/compressors/deflate64/Deflate64CompressorInputStreamTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/compress/compressors/deflate64/Deflate64CompressorInputStreamTest.java b/src/test/java/org/apache/commons/compress/compressors/deflate64/Deflate64CompressorInputStreamTest.java index 0232b06..b7b3cd9 100644 --- a/src/test/java/org/apache/commons/compress/compressors/deflate64/Deflate64CompressorInputStreamTest.java +++ b/src/test/java/org/apache/commons/compress/compressors/deflate64/Deflate64CompressorInputStreamTest.java @@ -133,4 +133,35 @@ public class Deflate64CompressorInputStreamTest { } } + @Test + public void streamIgnoresExtraBytesAfterDeflatedInput() throws Exception + { + byte[] data = { + 1, 11, 0, -12, -1, + 'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', 'X' + }; + + try (Deflate64CompressorInputStream input = new Deflate64CompressorInputStream(new ByteArrayInputStream(data)); + BufferedReader br = new BufferedReader(new InputStreamReader(input))) + { + assertEquals("Hello World", br.readLine()); + assertEquals(null, br.readLine()); + } + } + + @Test(expected = java.io.EOFException.class) + public void throwsEOFExceptionOnTruncatedStreams() throws Exception + { + byte[] data = { + 1, 11, 0, -12, -1, + 'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', + }; + + try (Deflate64CompressorInputStream input = new Deflate64CompressorInputStream(new ByteArrayInputStream(data)); + BufferedReader br = new BufferedReader(new InputStreamReader(input))) + { + assertEquals("Hello World", br.readLine()); + } + } + }