From owner-freebsd-bugs@FreeBSD.ORG Tue Nov 9 21:00:23 2010 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A56A91065672 for ; Tue, 9 Nov 2010 21:00:23 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 78B878FC0A for ; Tue, 9 Nov 2010 21:00:23 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.4/8.14.4) with ESMTP id oA9L0NWG027199 for ; Tue, 9 Nov 2010 21:00:23 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.4/8.14.4/Submit) id oA9L0NjW027173; Tue, 9 Nov 2010 21:00:23 GMT (envelope-from gnats) Date: Tue, 9 Nov 2010 21:00:23 GMT Message-Id: <201011092100.oA9L0NjW027173@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org From: dfilter@FreeBSD.ORG (dfilter service) Cc: Subject: Re: bin/151592: commit references a PR X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: dfilter service List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Nov 2010 21:00:23 -0000 The following reply was made to PR bin/151592; it has been noted by GNATS. From: dfilter@FreeBSD.ORG (dfilter service) To: bug-followup@FreeBSD.org Cc: Subject: Re: bin/151592: commit references a PR Date: Tue, 9 Nov 2010 20:57:01 +0000 (UTC) Author: dumbbell Date: Tue Nov 9 20:56:55 2010 New Revision: 215055 URL: http://svn.freebsd.org/changeset/base/215055 Log: MFC r214893: Fix a segmentation fault in argument processing. The crash was caused by a command line such as this one: # fold -b1 PR: bin/151592 Reported by: Marcus Reid Tested by: Marcus Reid Modified: stable/7/usr.bin/fold/fold.c Directory Properties: stable/7/usr.bin/fold/ (props changed) Modified: stable/7/usr.bin/fold/fold.c ============================================================================== --- stable/7/usr.bin/fold/fold.c Tue Nov 9 20:46:41 2010 (r215054) +++ stable/7/usr.bin/fold/fold.c Tue Nov 9 20:56:55 2010 (r215055) @@ -71,14 +71,14 @@ int sflag; /* Split on word boundaries int main(int argc, char **argv) { - int ch; + int ch, previous_ch; int rval, width; - char *p; (void) setlocale(LC_CTYPE, ""); width = -1; - while ((ch = getopt(argc, argv, "0123456789bsw:")) != -1) + previous_ch = 0; + while ((ch = getopt(argc, argv, "0123456789bsw:")) != -1) { switch (ch) { case 'b': bflag = 1; @@ -93,17 +93,33 @@ main(int argc, char **argv) break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': - if (width == -1) { - p = argv[optind - 1]; - if (p[0] == '-' && p[1] == ch && !p[2]) - width = atoi(++p); - else - width = atoi(argv[optind] + 1); + /* Accept a width as eg. -30. Note that a width + * specified using the -w option is always used prior + * to this undocumented option. */ + switch (previous_ch) { + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + /* The width is a number with multiple digits: + * add the last one. */ + width = width * 10 + (ch - '0'); + break; + default: + /* Set the width, unless it was previously + * set. For instance, the following options + * would all give a width of 5 and not 10: + * -10 -w5 + * -5b10 + * -5 -10b */ + if (width == -1) + width = ch - '0'; + break; } break; default: usage(); } + previous_ch = ch; + } argv += optind; argc -= optind; _______________________________________________ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"