Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 15 Oct 2017 15:39:38 +0000
From:      bugzilla-noreply@freebsd.org
To:        freebsd-bugs@FreeBSD.org
Subject:   [Bug 223031] bsdgrep behaves incorrectly when given multiple patterns
Message-ID:  <bug-223031-8@https.bugs.freebsd.org/bugzilla/>

next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D223031

            Bug ID: 223031
           Summary: bsdgrep behaves incorrectly when given multiple
                    patterns
           Product: Base System
           Version: 10.3-RELEASE
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Some People
          Priority: ---
         Component: bin
          Assignee: freebsd-bugs@FreeBSD.org
          Reporter: J.deBoynePollard-newsgroups@NTLWorld.COM

See https://unix.stackexchange.com/questions/398223/ for how to replicate t=
his.

Some investigation reveals that this is apparently down to the pmatch objec=
t in
the procline() function not being used properly.

In the outer loop, it is being used to track the start and end position wit=
hin
the current input line.  However, if multiple patterns are provided, in the
inner loop it is overwritten by the first call to fastexec()/regexec() and =
not
reinitialized with st and l->len for the next.

The (re)initialization code for pmatch.rm_so and pmatch.rm_eo needs to be m=
oved
down into the inner loop, so that it is set correctly for every pattern, not
just for the first one.

This also means that the

if (st =3D=3D (size_t)pmatch.rm_so)

code in the outer loop is probably wrong, too, as that will only detect the
output of the last fastexec()/regexec() call for the last of multiple patte=
rns.
 Perhaps there should be one pmatch object per pattern.

--=20
You are receiving this mail because:
You are the assignee for the bug.=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-223031-8>