Module Name:    src
Committed By:   simonb
Date:           Sat Jun 10 04:45:25 UTC 2023

Modified Files:
        src/usr.bin/gzip: gzip.c unlz.c unpack.c

Log Message:
Pull git commit way-etc-20140221.tar.bz2 by Xin Li from FreeBSD:

    Remove unneeded checks for prelen.

    In order to determine the type of a compressed file, we have to read
    in the first four bytes which may also be important for decompression
    purposes, to do that we would pass the buffer that we have already
    read in, along with the size of it.

    Rename header1 to fourbytes to make that explicit, and remove all
    checks for prelen.


To generate a diff of this commit:
cvs rdiff -u -r1.118 -r1.119 src/usr.bin/gzip/gzip.c
cvs rdiff -u -r1.7 -r1.8 src/usr.bin/gzip/unlz.c
cvs rdiff -u -r1.3 -r1.4 src/usr.bin/gzip/unpack.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.bin/gzip/gzip.c
diff -u src/usr.bin/gzip/gzip.c:1.118 src/usr.bin/gzip/gzip.c:1.119
--- src/usr.bin/gzip/gzip.c:1.118	Sat Jan 22 14:00:45 2022
+++ src/usr.bin/gzip/gzip.c	Sat Jun 10 04:45:25 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: gzip.c,v 1.118 2022/01/22 14:00:45 christos Exp $	*/
+/*	$NetBSD: gzip.c,v 1.119 2023/06/10 04:45:25 simonb Exp $	*/
 
 /*
  * Copyright (c) 1997, 1998, 2003, 2004, 2006, 2008, 2009, 2010, 2011, 2015, 2017
@@ -31,7 +31,7 @@
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1997, 1998, 2003, 2004, 2006, 2008,\
  2009, 2010, 2011, 2015, 2017 Matthew R. Green.  All rights reserved.");
-__RCSID("$NetBSD: gzip.c,v 1.118 2022/01/22 14:00:45 christos Exp $");
+__RCSID("$NetBSD: gzip.c,v 1.119 2023/06/10 04:45:25 simonb Exp $");
 #endif /* not lint */
 
 /*
@@ -1400,7 +1400,7 @@ file_uncompress(char *file, char *outfil
 	struct stat isb, osb;
 	off_t size;
 	ssize_t rbytes;
-	unsigned char header1[4];
+	unsigned char fourbytes[4];
 	enum filetype method;
 	int fd, ofd, zfd = -1;
 	size_t in_size;
@@ -1434,8 +1434,8 @@ file_uncompress(char *file, char *outfil
 		goto lose;
 	}
 
-	rbytes = read(fd, header1, sizeof header1);
-	if (rbytes != sizeof header1) {
+	rbytes = read(fd, fourbytes, sizeof fourbytes);
+	if (rbytes != sizeof fourbytes) {
 		/* we don't want to fail here. */
 #ifndef SMALL
 		if (fflag)
@@ -1449,7 +1449,7 @@ file_uncompress(char *file, char *outfil
 	}
 	infile_newdata(rbytes);
 
-	method = file_gettype(header1);
+	method = file_gettype(fourbytes);
 #ifndef SMALL
 	if (fflag == 0 && method == FT_UNKNOWN) {
 		maybe_warnx("%s: not in gzip format", file);
@@ -1473,7 +1473,7 @@ file_uncompress(char *file, char *outfil
 		infile_newdata(rv);
 		timestamp = ts[3] << 24 | ts[2] << 16 | ts[1] << 8 | ts[0];
 
-		if (header1[3] & ORIG_NAME) {
+		if (fourbytes[3] & ORIG_NAME) {
 			rbytes = pread(fd, name, sizeof(name) - 1, GZIP_ORIGNAME);
 			if (rbytes < 0) {
 				maybe_warn("can't read %s", file);
@@ -1787,7 +1787,7 @@ static void
 handle_stdin(void)
 {
 	struct stat isb;
-	unsigned char header1[4];
+	unsigned char fourbytes[4];
 	size_t in_size;
 	off_t usize, gsize;
 	enum filetype method;
@@ -1818,16 +1818,16 @@ handle_stdin(void)
 		goto out;
 	}
 
-	bytes_read = read_retry(STDIN_FILENO, header1, sizeof header1);
+	bytes_read = read_retry(STDIN_FILENO, fourbytes, sizeof fourbytes);
 	if (bytes_read == -1) {
 		maybe_warn("can't read stdin");
 		goto out;
-	} else if (bytes_read != sizeof(header1)) {
+	} else if (bytes_read != sizeof(fourbytes)) {
 		maybe_warnx("(stdin): unexpected end of file");
 		goto out;
 	}
 
-	method = file_gettype(header1);
+	method = file_gettype(fourbytes);
 	switch (method) {
 	default:
 #ifndef SMALL
@@ -1835,17 +1835,17 @@ handle_stdin(void)
 			maybe_warnx("unknown compression format");
 			goto out;
 		}
-		usize = cat_fd(header1, sizeof header1, &gsize, STDIN_FILENO);
+		usize = cat_fd(fourbytes, sizeof fourbytes, &gsize, STDIN_FILENO);
 		break;
 #endif
 	case FT_GZIP:
 		usize = gz_uncompress(STDIN_FILENO, STDOUT_FILENO,
-			      (char *)header1, sizeof header1, &gsize, "(stdin)");
+			      (char *)fourbytes, sizeof fourbytes, &gsize, "(stdin)");
 		break;
 #ifndef NO_BZIP2_SUPPORT
 	case FT_BZIP2:
 		usize = unbzip2(STDIN_FILENO, STDOUT_FILENO,
-				(char *)header1, sizeof header1, &gsize);
+				(char *)fourbytes, sizeof fourbytes, &gsize);
 		break;
 #endif
 #ifndef NO_COMPRESS_SUPPORT
@@ -1855,27 +1855,27 @@ handle_stdin(void)
 			goto out;
 		}
 
-		usize = zuncompress(in, stdout, (char *)header1,
-		    sizeof header1, &gsize);
+		usize = zuncompress(in, stdout, (char *)fourbytes,
+		    sizeof fourbytes, &gsize);
 		fclose(in);
 		break;
 #endif
 #ifndef NO_PACK_SUPPORT
 	case FT_PACK:
 		usize = unpack(STDIN_FILENO, STDOUT_FILENO,
-			       (char *)header1, sizeof header1, &gsize);
+			       (char *)fourbytes, sizeof fourbytes, &gsize);
 		break;
 #endif
 #ifndef NO_XZ_SUPPORT
 	case FT_XZ:
 		usize = unxz(STDIN_FILENO, STDOUT_FILENO,
-			     (char *)header1, sizeof header1, &gsize);
+			     (char *)fourbytes, sizeof fourbytes, &gsize);
 		break;
 #endif
 #ifndef NO_LZ_SUPPORT
 	case FT_LZ:
 		usize = unlz(STDIN_FILENO, STDOUT_FILENO,
-			     (char *)header1, sizeof header1, &gsize);
+			     (char *)fourbytes, sizeof fourbytes, &gsize);
 		break;
 #endif
 	}

Index: src/usr.bin/gzip/unlz.c
diff -u src/usr.bin/gzip/unlz.c:1.7 src/usr.bin/gzip/unlz.c:1.8
--- src/usr.bin/gzip/unlz.c:1.7	Fri Sep 10 21:52:17 2021
+++ src/usr.bin/gzip/unlz.c	Sat Jun 10 04:45:25 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: unlz.c,v 1.7 2021/09/10 21:52:17 rillig Exp $	*/
+/*	$NetBSD: unlz.c,v 1.8 2023/06/10 04:45:25 simonb Exp $	*/
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -616,8 +616,6 @@ unlz(int fin, int fout, char *pre, size_
 
 	char header[HDR_SIZE];
 
-	if (prelen > sizeof(header))
-		return -1;
 	if (pre && prelen)
 		memcpy(header, pre, prelen);
 	

Index: src/usr.bin/gzip/unpack.c
diff -u src/usr.bin/gzip/unpack.c:1.3 src/usr.bin/gzip/unpack.c:1.4
--- src/usr.bin/gzip/unpack.c:1.3	Fri Aug  4 07:27:08 2017
+++ src/usr.bin/gzip/unpack.c	Sat Jun 10 04:45:25 2023
@@ -1,5 +1,5 @@
 /*	$FreeBSD: head/usr.bin/gzip/unpack.c 194579 2009-06-21 09:39:43Z delphij $	*/
-/*	$NetBSD: unpack.c,v 1.3 2017/08/04 07:27:08 mrg Exp $	*/
+/*	$NetBSD: unpack.c,v 1.4 2023/06/10 04:45:25 simonb Exp $	*/
 
 /*-
  * Copyright (c) 2009 Xin LI <delp...@freebsd.org>
@@ -153,9 +153,6 @@ unpack_parse_header(int in, int out, cha
 	ssize_t bytesread;		/* Bytes read from the file */
 	int i, j, thisbyte;
 
-	if (prelen > sizeof hdr)
-		maybe_err("prelen too long");
-
 	/* Prepend the header buffer if we already read some data */
 	if (prelen != 0)
 		memcpy(hdr, pre, prelen);

Reply via email to