summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorJeroen Frijters <jeroen@sumatra.nl>2010-07-13 12:50:42 +0000
committerJeroen Frijters <jeroen@sumatra.nl>2010-07-13 12:50:42 +0000
commitef628fa0685b5a1b315f90f74f89571e0f4e3771 (patch)
treea1d8a233ba4402ec2add9e6635fb823e57e1746b /java
parent59c406834e89496fe126a7b43e6ce41a6dc10b6e (diff)
downloadclasspath-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.java7
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.