gzip: reject non-gzip files in zlib path.

It turns out that zlib defaults to just copying data verbatim if the
input isn't in gzip format, rather than rejecting it. Explicitly add a
check that zlib isn't doing that. (The toybox inflation path already
errors out.)

Also add the missing test.
This commit is contained in:
Elliott Hughes 2019-12-22 19:18:29 -08:00 committed by Rob Landley
parent 488f8507dc
commit 35ee6fcf9f
2 changed files with 4 additions and 0 deletions

View File

@ -76,3 +76,6 @@ testing "permissions/times preservation" \
"gzip -k f1 && TZ=UTC stat -c '%a %Y' f1 && stat -c '%a %X %Y' f1.gz" \
"411 544413660\n411 252558240 544413660\n" "" ""
rm -f f1 f1.gz
testing "reject non-gzip" "gzip -dc $FILES/blkid/msdos.bz2 2>/dev/null ||
echo rejected" "rejected\n" "" ""

View File

@ -78,6 +78,7 @@ static int do_deflate(int in_fd, int out_fd, int dd, int level)
}
if (!(gz = gzdopen(dd ? in_fd : out_fd, b))) perror_exit("gzdopen");
if (dd) {
if (gzdirect(gz)) error_exit("not gzip");
while ((len = gzread(gz, toybuf, sizeof(toybuf))) > 0)
if (len != writeall(out_fd, toybuf, len)) break;
} else {