For PR libgcj/8593:
* java/util/zip/GZIPInputStream.java (read): Check file size. Look in inflater for remaining input bytes. (read4): Added buf and offset arguments. From-SVN: r59145
This commit is contained in:
parent
6368a49321
commit
401d536248
@ -1,3 +1,10 @@
|
|||||||
|
2002-11-15 Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
|
For PR libgcj/8593:
|
||||||
|
* java/util/zip/GZIPInputStream.java (read): Check file size.
|
||||||
|
Look in inflater for remaining input bytes.
|
||||||
|
(read4): Added buf and offset arguments.
|
||||||
|
|
||||||
2002-11-12 Eric Blake <ebb9@email.byu.edu>
|
2002-11-12 Eric Blake <ebb9@email.byu.edu>
|
||||||
|
|
||||||
* java/applet/AppletContext.java: Fix typo and remove redundant
|
* java/applet/AppletContext.java: Fix typo and remove redundant
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* GZIPInputStream.java - Input filter for reading gzip file
|
/* GZIPInputStream.java - Input filter for reading gzip file
|
||||||
Copyright (C) 1999, 2000 Free Software Foundation, Inc.
|
Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GNU Classpath.
|
This file is part of GNU Classpath.
|
||||||
|
|
||||||
@ -141,28 +141,34 @@ public class GZIPInputStream extends InflaterInputStream
|
|||||||
if (r == -1)
|
if (r == -1)
|
||||||
{
|
{
|
||||||
eos = true;
|
eos = true;
|
||||||
int header_crc = read4 ();
|
|
||||||
|
byte[] tmp = new byte[8];
|
||||||
|
// First copy remaining bytes from inflater input buffer.
|
||||||
|
int avail = inf.getRemaining ();
|
||||||
|
System.arraycopy (this.buf, this.len - avail, tmp, 0, avail);
|
||||||
|
|
||||||
|
// Now read remaining bytes from wrapped input stream.
|
||||||
|
for (int i = avail; i < 8; ++i)
|
||||||
|
{
|
||||||
|
tmp[i] = (byte) eof_read ();
|
||||||
|
}
|
||||||
|
|
||||||
|
int header_crc = read4 (tmp, 0);
|
||||||
if (crc.getValue() != header_crc)
|
if (crc.getValue() != header_crc)
|
||||||
throw new ZipException ("corrupted gzip file");
|
throw new ZipException ("corrupted gzip file - crc mismatch");
|
||||||
// Read final `ISIZE' field.
|
int isize = read4 (tmp, 4);
|
||||||
// FIXME: should we check this length?
|
if (inf.getTotalOut() != isize)
|
||||||
read4 ();
|
throw new ZipException ("corrupted gzip file - size mismatch");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
crc.update(buf, off, r);
|
crc.update(buf, off, r);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
private final int read4 () throws IOException
|
private final int read4 (byte[] buf, int offset) throws IOException
|
||||||
{
|
{
|
||||||
int byte0 = in.read();
|
return (((buf[offset + 3] & 0xFF) << 24) + ((buf[offset + 2] & 0xFF) << 16)
|
||||||
int byte1 = in.read();
|
+ ((buf[offset + 1] & 0xFF) << 8) + (buf[offset] & 0xFF));
|
||||||
int byte2 = in.read();
|
|
||||||
int byte3 = in.read();
|
|
||||||
if (byte3 < 0)
|
|
||||||
throw new ZipException (".zip archive ended prematurely");
|
|
||||||
return ((byte3 & 0xFF) << 24) + ((byte2 & 0xFF) << 16)
|
|
||||||
+ ((byte1 & 0xFF) << 8) + (byte0 & 0xFF);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Checksum used by this input stream.
|
// Checksum used by this input stream.
|
||||||
|
Loading…
Reference in New Issue
Block a user