Hello,
I've committed the patch below and closed the bug.
Regards,
Jeroen
Index: InflaterHuffmanTree.java
===================================================================
RCS file: /cvsroot/classpath/classpath/java/util/zip/InflaterHuffmanTree.java,v
retrieving revision 1.7
diff -u -r1.7 InflaterHuffmanTree.java
--- InflaterHuffmanTree.java 3 Jun 2010 19:13:21 -0000 1.7
+++ InflaterHuffmanTree.java 13 Jul 2010 12:42:57 -0000
@@ -95,11 +95,14 @@
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 @@
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.
> -----Original Message-----
> From: [email protected] [mailto:classpath-patches-
> [email protected]] On Behalf Of Ivan Maidanski
> Sent: Monday, June 28, 2010 9:41 AM
> To: classpath-patches
> Cc: Daniel Noll; Andrew John Hughes
> Subject: [cp-patches] What's about bug 36560 (Error parsing zip
> file...)?
>
> Hello!
>
> Andrew -
> could you apply the proposed patch
> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=18682&action=view) and
> close bug 36560?
>
> I can't immediately propose the test case for this bug but I've
> discovered this issue when tried to use Classpath
> Inflater/InflaterInputStream with OpenJDK PNGImageReader - on some
> legacy .png files a ZipException("Code lengths don't add up properly")
> was thrown while OpenJDK Inflater (based on zlib) worked correctly. The
> patch proposed by Daniel Noll solved my problem.
>
> Regards.