[Bug 223031] bsdgrep behaves incorrectly when given multiple patterns

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Sun Oct 15 15:39:38 UTC 2017


https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=223031

            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 at FreeBSD.org
          Reporter: J.deBoynePollard-newsgroups at NTLWorld.COM

See https://unix.stackexchange.com/questions/398223/ for how to replicate this.

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

In the outer loop, it is being used to track the start and end position within
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 moved
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 == (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 patterns.
 Perhaps there should be one pmatch object per pattern.

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


More information about the freebsd-bugs mailing list