From owner-freebsd-hackers@freebsd.org Mon Aug 1 18:23:47 2016 Return-Path: Delivered-To: freebsd-hackers@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7A7D3BAB6A6; Mon, 1 Aug 2016 18:23:47 +0000 (UTC) (envelope-from sgk@troutmask.apl.washington.edu) Received: from troutmask.apl.washington.edu (troutmask.apl.washington.edu [128.95.76.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "troutmask", Issuer "troutmask" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 5E0B81ECA; Mon, 1 Aug 2016 18:23:47 +0000 (UTC) (envelope-from sgk@troutmask.apl.washington.edu) Received: from troutmask.apl.washington.edu (localhost [127.0.0.1]) by troutmask.apl.washington.edu (8.15.2/8.15.2) with ESMTPS id u71Ggjs5032137 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Mon, 1 Aug 2016 09:42:45 -0700 (PDT) (envelope-from sgk@troutmask.apl.washington.edu) Received: (from sgk@localhost) by troutmask.apl.washington.edu (8.15.2/8.15.2/Submit) id u71GgjRb032136; Mon, 1 Aug 2016 09:42:45 -0700 (PDT) (envelope-from sgk) Date: Mon, 1 Aug 2016 09:42:45 -0700 From: Steve Kargl To: Dimitry Andric Cc: FreeBSD Current , FreeBSD Hackers Subject: Re: BSD grep dumps core Message-ID: <20160801164245.GA31972@troutmask.apl.washington.edu> Reply-To: kargl@uw.edu References: <20160731153738.GA33643@troutmask.apl.washington.edu> <54B0B5B7-25CF-4B7D-9874-73D33481CC1C@FreeBSD.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <54B0B5B7-25CF-4B7D-9874-73D33481CC1C@FreeBSD.org> User-Agent: Mutt/1.6.1 (2016-04-27) X-Mailman-Approved-At: Mon, 01 Aug 2016 18:36:26 +0000 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Aug 2016 18:23:47 -0000 On Mon, Aug 01, 2016 at 06:22:16PM +0200, Dimitry Andric wrote: > On 31 Jul 2016, at 17:37, Steve Kargl wrote: > > Script started on Sun Jul 31 08:30:56 2016 > > troutmask:sgk[200] cd gcc/gcc7 > > troutmask:sgk[201] svn status > > ? 7.diff > > ? decl.c.diff > > ? gcc/fortran/old > > ? gcc/fortran/pr38351.diff > > ? gcc/fortran/pr41922.diff > > ? gcc/fortran/pr69860.diff > > ? trans-decl.c.diff > > ? typescript > > ? z1.diff > > troutmask:sgk[202] svn status | grep -v -E ^\? > > Segmentation fault (core dumped) > > troutmask:sgk[203] svn status | grep -v -E ^"\?" > > troutmask:sgk[204] exit > > exit > > > > Script done on Sun Jul 31 08:31:54 2016 > > > > The core dump happens with both tcsh and sh. > > > > The following works as expected > > > > troutmask:sgk[202] svn status | gnugrep -v -E ^\? > > Yes, '^?' is an invalid extended regular expression, but GNU grep does > not complain about it, and simply discards the '?' character. Our BSD > grep dies because it also attempts to discard, but then some later logic > goes beyond the end of the buffer. > > Please try this fix: > > Index: usr.bin/grep/regex/tre-fastmatch.c > =================================================================== > --- usr.bin/grep/regex/tre-fastmatch.c (revision 303551) > +++ usr.bin/grep/regex/tre-fastmatch.c (working copy) > @@ -621,7 +621,7 @@ tre_compile_fast(fastmatch_t *fg, const tre_char_t > case TRE_CHAR('+'): > case TRE_CHAR('?'): > if ((cflags & REG_EXTENDED) && (i == 0)) > - continue; > + goto badpat; > else if ((cflags & REG_EXTENDED) ^ !escaped) > STORE_CHAR; > else > > After this, bsdgrep errors out with: > > % bsdgrep -E '^?' > bsdgrep: Invalid preceding regular expression > > which is much saner IMHO. > Dimitry, Thanks for the quick patch. Yes, the patch works as advertised. I agree that an error message is preferredi/saner than a segfault. -- Steve