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>