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/>

index | next in thread | raw e-mail

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

help

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