summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTodd C. Miller <millert@cvs.openbsd.org>2002-03-13 18:14:19 +0000
committerTodd C. Miller <millert@cvs.openbsd.org>2002-03-13 18:14:19 +0000
commitade140d2f64c0286ec3f0a8cc5634f5221b420a3 (patch)
treeba6b67c724e261855f755de4bc611970c672bf70
parentda3186afab3cfdb62d04bd3818ff14076e6b160a (diff)
User may specify a suffix longer than 3 characters. Take this into
account when sanity checking buffer size; itojun@
-rw-r--r--gnu/usr.bin/gzip/gzip.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/gnu/usr.bin/gzip/gzip.c b/gnu/usr.bin/gzip/gzip.c
index 0fad2d46ff5..5eb0b243309 100644
--- a/gnu/usr.bin/gzip/gzip.c
+++ b/gnu/usr.bin/gzip/gzip.c
@@ -45,7 +45,7 @@ static char *license_msg[] = {
*/
#ifdef RCSID
-static char rcsid[] = "$Id: gzip.c,v 1.4 1998/11/22 20:03:21 deraadt Exp $";
+static char rcsid[] = "$Id: gzip.c,v 1.5 2002/03/13 18:14:18 millert Exp $";
#endif
#include <ctype.h>
@@ -1011,8 +1011,10 @@ local int get_istat(iname, sbuf)
#ifdef NO_MULTIPLE_DOTS
char *dot; /* pointer to ifname extension, or NULL */
#endif
+ int max_suffix_len = (z_len > 3 ? z_len : 3);
- if (strlen(iname) >= sizeof(ifname) - 3) {
+ /* Make sure there is enough room in ifname for iname + suffix. */
+ if (strlen(iname) >= sizeof(ifname) - max_suffix_len) {
errno = ENAMETOOLONG;
perror(iname);
exit_code = ERROR;