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>
