Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 1 Aug 2016 18:22:16 +0200
From:      Dimitry Andric <dim@FreeBSD.org>
To:        Steve Kargl <sgk@troutmask.apl.washington.edu>
Cc:        FreeBSD Current <freebsd-current@freebsd.org>, FreeBSD Hackers <freebsd-hackers@freebsd.org>
Subject:   Re: BSD grep dumps core
Message-ID:  <54B0B5B7-25CF-4B7D-9874-73D33481CC1C@FreeBSD.org>
In-Reply-To: <20160731153738.GA33643@troutmask.apl.washington.edu>
References:  <20160731153738.GA33643@troutmask.apl.washington.edu>

next in thread | previous in thread | raw e-mail | index | archive | help

--Apple-Mail=_56E280E6-6C8C-4D30-B32E-3A3B0932FE1F
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=us-ascii

On 31 Jul 2016, at 17:37, Steve Kargl <sgk@troutmask.apl.washington.edu> =
wrote:
>=20
> 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
>=20
> Script done on Sun Jul 31 08:31:54 2016
>=20
> The core dump happens with both tcsh and sh.
>=20
> The following works as expected
>=20
> 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
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- 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 =3D=3D 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


--Apple-Mail=_56E280E6-6C8C-4D30-B32E-3A3B0932FE1F
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
	filename=signature.asc
Content-Type: application/pgp-signature;
	name=signature.asc
Content-Description: Message signed with OpenPGP using GPGMail

-----BEGIN PGP SIGNATURE-----
Version: GnuPG/MacGPG2 v2.0.30

iEYEARECAAYFAlefdzwACgkQsF6jCi4glqN/fACguF9Gh9i4kCUA936CLMlMHnCZ
+4oAn1iuihtI/htbER4YTHFqym/hQbJ3
=zfdm
-----END PGP SIGNATURE-----

--Apple-Mail=_56E280E6-6C8C-4D30-B32E-3A3B0932FE1F--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?54B0B5B7-25CF-4B7D-9874-73D33481CC1C>