mirror of
https://github.com/opnsense/src.git
synced 2026-04-24 07:37:25 -04:00
Apply patch from gzip web page to correctly decompress files larger than
4GB on architectures with 64-bit long integers.
This commit is contained in:
parent
10c546c43f
commit
def2bdaaa5
1 changed files with 14 additions and 10 deletions
|
|
@ -35,6 +35,7 @@ static char rcsid[] = "$FreeBSD$";
|
|||
#define LOCEXT 28 /* offset of extra field length */
|
||||
#define LOCHDR 30 /* size of local header, including sig */
|
||||
#define EXTHDR 16 /* size of extended local header, inc sig */
|
||||
#define RAND_HEAD_LEN 12 /* length of encryption random header */
|
||||
|
||||
|
||||
/* Globals */
|
||||
|
|
@ -103,6 +104,7 @@ int unzip(in, out)
|
|||
ulg orig_len = 0; /* original uncompressed length */
|
||||
int n;
|
||||
uch buf[EXTHDR]; /* extended local header */
|
||||
int err = OK;
|
||||
|
||||
ifd = in;
|
||||
ofd = out;
|
||||
|
|
@ -136,9 +138,6 @@ int unzip(in, out)
|
|||
}
|
||||
while (n--) {
|
||||
uch c = (uch)get_byte();
|
||||
#ifdef CRYPT
|
||||
if (decrypt) zdecode(c);
|
||||
#endif
|
||||
put_ubyte(c);
|
||||
}
|
||||
flush_window();
|
||||
|
|
@ -172,10 +171,14 @@ int unzip(in, out)
|
|||
|
||||
/* Validate decompression */
|
||||
if (orig_crc != updcrc(outbuf, 0)) {
|
||||
error("invalid compressed data--crc error");
|
||||
fprintf(stderr, "\n%s: %s: invalid compressed data--crc error\n",
|
||||
progname, ifname);
|
||||
err = ERROR;
|
||||
}
|
||||
if (orig_len != (ulg)bytes_out) {
|
||||
error("invalid compressed data--length error");
|
||||
if (((orig_len - (ulg)bytes_out) & 0x0ffffffffL) != 0) {
|
||||
fprintf(stderr, "\n%s: %s: invalid compressed data--length error\n",
|
||||
progname, ifname);
|
||||
err = ERROR;
|
||||
}
|
||||
|
||||
/* Check if there are more entries in a pkzip file */
|
||||
|
|
@ -189,11 +192,12 @@ int unzip(in, out)
|
|||
fprintf(stderr,
|
||||
"%s: %s has more than one entry -- unchanged\n",
|
||||
progname, ifname);
|
||||
exit_code = ERROR;
|
||||
ext_header = pkzip = 0;
|
||||
return ERROR;
|
||||
err = ERROR;
|
||||
}
|
||||
}
|
||||
ext_header = pkzip = 0; /* for next file */
|
||||
return OK;
|
||||
if (err == OK) return OK;
|
||||
exit_code = ERROR;
|
||||
if (!test) abort_gzip();
|
||||
return err;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue