diff options
author | msmith <msmith@FreeBSD.org> | 1998-10-20 05:52:33 +0000 |
---|---|---|
committer | msmith <msmith@FreeBSD.org> | 1998-10-20 05:52:33 +0000 |
commit | ab79d507a2af1a9d753d8cc5b7ccbb77a38a6f15 (patch) | |
tree | cec3a658ad314dd9a0d69426960228a8fd89b5ac /bin/pax/tar.c | |
parent | 387d41304320dd490db7625bb436caad5c35737b (diff) | |
download | FreeBSD-src-ab79d507a2af1a9d753d8cc5b7ccbb77a38a6f15.zip FreeBSD-src-ab79d507a2af1a9d753d8cc5b7ccbb77a38a6f15.tar.gz |
- Fix off-by-one problem in tar where filenames of length 100
and dirnames of length 99 don't archive.
Submitted by: Wilfredo Sanchez <wsanchez@apple.com>
Obtained from: OpenBSD
Diffstat (limited to 'bin/pax/tar.c')
-rw-r--r-- | bin/pax/tar.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/bin/pax/tar.c b/bin/pax/tar.c index bde4c45..ba8c6b0 100644 --- a/bin/pax/tar.c +++ b/bin/pax/tar.c @@ -40,7 +40,7 @@ static char sccsid[] = "@(#)tar.c 8.2 (Berkeley) 4/18/94"; #endif static const char rcsid[] = - "$Id$"; + "$Id: tar.c,v 1.10 1998/05/15 06:27:47 charnier Exp $"; #endif /* not lint */ #include <sys/types.h> @@ -977,7 +977,7 @@ ustar_wr(arcn) * check the length of the linkname */ if (((arcn->type == PAX_SLK) || (arcn->type == PAX_HLK) || - (arcn->type == PAX_HRG)) && (arcn->ln_nlen > sizeof(hd->linkname))){ + (arcn->type == PAX_HRG)) && (arcn->ln_nlen >= sizeof(hd->linkname))){ pax_warn(1, "Link name too long for ustar %s", arcn->ln_name); return(1); } @@ -1156,17 +1156,16 @@ name_split(name, len) */ if (len <= TNMSZ) return(name); - if (len > (TPFSZ + TNMSZ + 1)) + if (len > (TPFSZ + TNMSZ)) return(NULL); /* * we start looking at the biggest sized piece that fits in the name * field. We walk foward looking for a slash to split at. The idea is * to find the biggest piece to fit in the name field (or the smallest - * prefix we can find) (the -1 is correct the biggest piece would - * include the slash between the two parts that gets thrown away) + * prefix we can find) */ - start = name + len - TNMSZ - 1; + start = name + len - TNMSZ; while ((*start != '\0') && (*start != '/')) ++start; @@ -1184,7 +1183,7 @@ name_split(name, len) * the file would then expand on extract to //str. The len == 0 below * makes this special case follow the spec to the letter. */ - if ((len > TPFSZ) || (len == 0)) + if ((len >= TPFSZ) || (len == 0)) return(NULL); /* |