mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-19 22:41:28 +08:00
re PR java/23617 (Out of memory when classpath contains jar file with zip-style comment)
2005-11-08 Wil Mahan <wmahan@gmail.com> PR java/23617 * zextract.c (read_zip_archive): Fix out of memory error when reading jar files with zip-style comments. From-SVN: r106648
This commit is contained in:
parent
a8bfea9ca9
commit
1c57e8763b
@ -1,3 +1,9 @@
|
||||
2005-11-08 Wil Mahan <wmahan@gmail.com>
|
||||
|
||||
PR java/23617
|
||||
* zextract.c (read_zip_archive): Fix out of memory error when
|
||||
reading jar files with zip-style comments.
|
||||
|
||||
2005-11-07 Terry Laurenzo <tlaurenzo@gmail.com>
|
||||
|
||||
* gjavah.c (HANDLE_CODE_ATTRIBUTE): Only define for ELF Object
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* Handle a .class file embedded in a .zip archive.
|
||||
This extracts a member from a .zip file, but does not handle
|
||||
uncompression (since that is not needed for classes.zip).
|
||||
Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004
|
||||
Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
@ -287,6 +287,25 @@ read_zip_archive (ZipFile *zipf)
|
||||
return -1;
|
||||
if (read (zipf->fd, buffer, ECREC_SIZE+4) != ECREC_SIZE+4)
|
||||
return -2;
|
||||
if (buffer[0] != 'P'
|
||||
|| strncmp ((const char *) &buffer[1], END_CENTRAL_SIG, 3))
|
||||
{
|
||||
/* We could not find the end-central-header signature, probably
|
||||
because a zipfile comment is present. Scan backwards until we
|
||||
find the signature. */
|
||||
if (lseek (zipf->fd, (long)(-ECREC_SIZE), SEEK_END) <= 0)
|
||||
return -2;
|
||||
while (buffer[0] != 'P'
|
||||
|| strncmp ((const char *) &buffer[1], END_CENTRAL_SIG, 3))
|
||||
{
|
||||
if (lseek (zipf->fd, -5, SEEK_CUR) < 0)
|
||||
return -2;
|
||||
if (read (zipf->fd, buffer, 4) != 4)
|
||||
return -2;
|
||||
}
|
||||
if (read (zipf->fd, buffer + 4, ECREC_SIZE) != ECREC_SIZE)
|
||||
return -2;
|
||||
}
|
||||
zipf->count = makeword((const uch *) &buffer[TOTAL_ENTRIES_CENTRAL_DIR]);
|
||||
zipf->dir_size = makelong((const uch *) &buffer[SIZE_CENTRAL_DIRECTORY]);
|
||||
#define ALLOC xmalloc
|
||||
|
Loading…
x
Reference in New Issue
Block a user