NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
re: bin/41793: gzip fails to decompress multiple logical bzip2 streams created pbzip2
The following reply was made to PR bin/41793; it has been noted by GNATS.
From: matthew green <mrg%eterna.com.au@localhost>
To: gnats-bugs%NetBSD.org@localhost
Cc: gnats-admin%netbsd.org@localhost, netbsd-bugs%netbsd.org@localhost
Subject: re: bin/41793: gzip fails to decompress multiple logical bzip2 streams
created pbzip2
Date: Wed, 29 Jul 2009 03:30:25 +1000
this fixes the problem.
.mrg.
Index: unbzip2.c
===================================================================
RCS file: /cvsroot/src/usr.bin/gzip/unbzip2.c,v
retrieving revision 1.11
diff -p -r1.11 unbzip2.c
*** unbzip2.c 28 Apr 2008 20:24:13 -0000 1.11
--- unbzip2.c 28 Jul 2009 17:29:21 -0000
*************** unbzip2(int in, int out, char *pre, size
*** 62,68 ****
if (bytes_in)
*bytes_in = prelen;
! while (ret >= BZ_OK && ret != BZ_STREAM_END) {
if (bzs.avail_in == 0 && !end_of_file) {
ssize_t n;
--- 62,68 ----
if (bytes_in)
*bytes_in = prelen;
! while (ret == BZ_OK) {
if (bzs.avail_in == 0 && !end_of_file) {
ssize_t n;
*************** unbzip2(int in, int out, char *pre, size
*** 86,92 ****
case BZ_OK:
if (ret == BZ_OK && end_of_file)
maybe_err("read");
! if (!tflag) {
ssize_t n;
n = write(out, outbuf, BUFLEN - bzs.avail_out);
--- 86,92 ----
case BZ_OK:
if (ret == BZ_OK && end_of_file)
maybe_err("read");
! if (!tflag && bzs.avail_out != BUFLEN) {
ssize_t n;
n = write(out, outbuf, BUFLEN - bzs.avail_out);
*************** unbzip2(int in, int out, char *pre, size
*** 94,100 ****
maybe_err("write");
bytes_out += n;
}
! break;
case BZ_DATA_ERROR:
maybe_warnx("bzip2 data integrity error");
--- 94,106 ----
maybe_err("write");
bytes_out += n;
}
! if (ret == BZ_STREAM_END && !end_of_file) {
! if (BZ2_bzDecompressEnd(&bzs) != BZ_OK ||
! BZ2_bzDecompressInit(&bzs, 0, 0) != BZ_OK)
! maybe_errx("bzip2 re-init");
! ret = BZ_OK;
! }
! break;
case BZ_DATA_ERROR:
maybe_warnx("bzip2 data integrity error");
*************** unbzip2(int in, int out, char *pre, size
*** 107,113 ****
case BZ_MEM_ERROR:
maybe_warnx("bzip2 out of memory");
break;
!
}
}
--- 113,122 ----
case BZ_MEM_ERROR:
maybe_warnx("bzip2 out of memory");
break;
!
! default:
! maybe_warnx("unknown bzip2 error: %d", ret);
! break;
}
}
Home |
Main Index |
Thread Index |
Old Index