diff options
author | Jeroen Frijters <jeroen@sumatra.nl> | 2010-07-13 12:50:42 +0000 |
---|---|---|
committer | Jeroen Frijters <jeroen@sumatra.nl> | 2010-07-13 12:50:42 +0000 |
commit | ef628fa0685b5a1b315f90f74f89571e0f4e3771 (patch) | |
tree | a1d8a233ba4402ec2add9e6635fb823e57e1746b /java | |
parent | 59c406834e89496fe126a7b43e6ce41a6dc10b6e (diff) | |
download | classpath-ef628fa0685b5a1b315f90f74f89571e0f4e3771.tar.gz |
Fix for #36560. Patch by Daniel Noll. I took the exception message from the zlib code (for compatibility with the JDK).
Diffstat (limited to 'java')
-rw-r--r-- | java/util/zip/InflaterHuffmanTree.java | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/java/util/zip/InflaterHuffmanTree.java b/java/util/zip/InflaterHuffmanTree.java index c12c732e0..f6b5816ff 100644 --- a/java/util/zip/InflaterHuffmanTree.java +++ b/java/util/zip/InflaterHuffmanTree.java @@ -95,11 +95,14 @@ class InflaterHuffmanTree blCount[bits]++; } + int max = 0; int code = 0; int treeSize = 512; for (int bits = 1; bits <= MAX_BITLEN; bits++) { nextCode[bits] = code; + if (blCount[bits] > 0) + max = bits; code += blCount[bits] << (16 - bits); if (bits >= 10) { @@ -109,8 +112,8 @@ class InflaterHuffmanTree treeSize += (end - start) >> (16 - bits); } } - if (code != 65536) - throw new DataFormatException("Code lengths don't add up properly."); + if (code != 65536 && max != 1) + throw new DataFormatException("incomplete dynamic bit lengths tree"); /* Now create and fill the extra tables from longest to shortest * bit len. This way the sub trees will be aligned. |