do not use directory paths present in gzip files with the -N flag,

similar to the problem reported in pigz.
This commit is contained in:
mrg 2015-01-13 02:37:20 +00:00
parent 1170f5637d
commit a1b1261ab6
2 changed files with 18 additions and 9 deletions

View File

@ -1,4 +1,4 @@
.\" $NetBSD: gzip.1,v 1.23 2014/03/18 18:20:45 riastradh Exp $
.\" $NetBSD: gzip.1,v 1.24 2015/01/13 02:37:20 mrg Exp $
.\"
.\" Copyright (c) 1997, 2003, 2004 Matthew R. Green
.\" All rights reserved.
@ -24,7 +24,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.Dd June 18, 2011
.Dd January 13, 2015
.Dt GZIP 1
.Os
.Sh NAME
@ -191,7 +191,7 @@ program for
This manual documents
.Nx
.Nm
version 20040427.
version 20150113.
.Sh AUTHORS
This implementation of
.Nm

View File

@ -1,4 +1,4 @@
/* $NetBSD: gzip.c,v 1.106 2014/10/18 08:33:30 snj Exp $ */
/* $NetBSD: gzip.c,v 1.107 2015/01/13 02:37:20 mrg Exp $ */
/*
* Copyright (c) 1997, 1998, 2003, 2004, 2006 Matthew R. Green
@ -30,7 +30,7 @@
#ifndef lint
__COPYRIGHT("@(#) Copyright (c) 1997, 1998, 2003, 2004, 2006\
Matthew R. Green. All rights reserved.");
__RCSID("$NetBSD: gzip.c,v 1.106 2014/10/18 08:33:30 snj Exp $");
__RCSID("$NetBSD: gzip.c,v 1.107 2015/01/13 02:37:20 mrg Exp $");
#endif /* not lint */
/*
@ -160,7 +160,7 @@ static suffixes_t suffixes[] = {
#define NUM_SUFFIXES (sizeof suffixes / sizeof suffixes[0])
#define SUFFIX_MAXLEN 30
static const char gzip_version[] = "NetBSD gzip 20101018";
static const char gzip_version[] = "NetBSD gzip 20150113";
static int cflag; /* stdout mode */
static int dflag; /* decompress mode */
@ -1311,7 +1311,7 @@ file_uncompress(char *file, char *outfile, size_t outsize)
#ifndef SMALL
ssize_t rv;
time_t timestamp = 0;
unsigned char name[PATH_MAX + 1];
char name[PATH_MAX + 1];
#endif
/* gather the old name info */
@ -1372,15 +1372,24 @@ file_uncompress(char *file, char *outfile, size_t outsize)
goto lose;
}
if (name[0] != 0) {
char *dp, *nf;
/* strip saved directory name */
nf = strrchr(name, '/');
if (nf == NULL)
nf = name;
else
nf++;
/* preserve original directory name */
char *dp = strrchr(file, '/');
dp = strrchr(file, '/');
if (dp == NULL)
dp = file;
else
dp++;
snprintf(outfile, outsize, "%.*s%.*s",
(int) (dp - file),
file, (int) rbytes, name);
file, (int) rbytes, nf);
}
}
}