From cb19e170f1293ef93f13ddf4c82228e29304662d Mon Sep 17 00:00:00 2001 From: cperciva Date: Thu, 25 Aug 2005 17:01:06 +0000 Subject: Fix a bug introduced in revision 1.9 which causes chkgrp to coredump on certain corrupt files. Submitted by: liamfoy@dragonflybsd.org Reported by: Nikolay Kalev, via freebsd-current MFC after: 3 days --- usr.sbin/chkgrp/chkgrp.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'usr.sbin/chkgrp') diff --git a/usr.sbin/chkgrp/chkgrp.c b/usr.sbin/chkgrp/chkgrp.c index 635ec8f..eca26af 100644 --- a/usr.sbin/chkgrp/chkgrp.c +++ b/usr.sbin/chkgrp/chkgrp.c @@ -36,6 +36,8 @@ __FBSDID("$FreeBSD$"); #include #include +static char empty[] = { 0 }; + static void usage(void) { @@ -105,6 +107,13 @@ main(int argc, char *argv[]) line[i++] = 0; } + if (k < 4) { + warnx("%s: line %d: missing field(s)", gfn, n); + for ( ; k < 4; k++) + f[k] = empty; + e++; + } + for (cp = f[0] ; *cp ; cp++) { if (!isalnum(*cp) && *cp != '.' && *cp != '_' && *cp != '-' && (cp > f[0] || *cp != '+')) { @@ -121,11 +130,6 @@ main(int argc, char *argv[]) } } - if (k < 4) { - warnx("%s: line %d: missing field(s)", gfn, n); - e++; - } - /* check if fourth field ended with a colon */ if (i < len) { warnx("%s: line %d: too many fields", gfn, n); -- cgit v1.1