+2004-09-22 Tom Tromey <tromey@redhat.com>
+
+ PR libgcj/14446:
+ * java/util/zip/GZIPInputStream.java (read): Avoid sign extension
+ when comparing CRCs.
+ * java/util/zip/InflaterInputStream.java (onebytebuffer): New
+ field.
+ (read()): New overload.
+
2004-09-21 Tom Tromey <tromey@redhat.com>
* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA):
tmp[i] = (byte) eof_read();
}
- int header_crc = read4(tmp, 0);
+ // Be careful to avoid sign extension here; CRC32.getValue()
+ // returns a long.
+ long header_crc = read4(tmp, 0) & 0xffffffffL;
if (crc.getValue() != header_crc)
throw new ZipException("corrupted gzip file - crc mismatch");
int isize = read4(tmp, 4);
*/
protected int len;
+ // We just use this if we are decoding one byte at a time with the
+ // read() call.
+ private byte[] onebytebuffer = new byte[1];
/**
* Create an InflaterInputStream with the default decompresseor
inf.setInput(buf, 0, len);
}
+ /**
+ * Reads one byte of decompressed data.
+ *
+ * The byte is in the lower 8 bits of the int.
+ */
+ public int read() throws IOException
+ {
+ int nread = read(onebytebuffer, 0, 1);
+ if (nread > 0)
+ return onebytebuffer[0] & 0xff;
+ return -1;
+ }
+
/**
* Decompresses data into the byte array
*