[pcre-dev] [Bug 2187] New: garbled output in multiline mode

Αρχική Σελίδα
Delete this message
Συντάκτης: admin
Ημερομηνία:  
Προς: pcre-dev
Καινούρια Θέματα: [pcre-dev] [Bug 2187] garbled output in multiline mode, [pcre-dev] [Bug 2187] garbled output in multiline mode
Αντικείμενο: [pcre-dev] [Bug 2187] New: garbled output in multiline mode
https://bugs.exim.org/show_bug.cgi?id=2187

            Bug ID: 2187
           Summary: garbled output in multiline mode
           Product: PCRE
           Version: 10.30 (PCRE2)
          Hardware: x86-64
                OS: Linux
            Status: NEW
          Severity: bug
          Priority: medium
         Component: Code
          Assignee: ph10@???
          Reporter: glyphimor@???
                CC: pcre-dev@???


Hello again,

The affected software is pcregrep (8.41) and pcre2grep (10.30) on Linux
(Gentoo).

Noticed some issues w/ pcre2grep output while doing multiline greps. It seems
to occur when there are 2 matches on 1 line, the 2nd match of which extends
onto a 2nd line. (In contrast, it works ok when a match goes from line 1 to
line 2, and there's a 2nd match on line 2.)

Run these commands to reproduce. (You can also add options like -H or -n to the
grep commands to make the output clearer -- it doesn't affect the results.)

--
mkdir test
cd test

echo "start end" > 1-line-1-match.txt
echo -e "start\nend" > 2-lines-1-match.txt
echo -e "start\nend start end" > 2-lines-ending-with-2-matches.txt
echo -e "start end start\nend" > 2-lines-starting-with-2-matches.txt

pcre2grep -M --color -e 'start[\s]+end' 1-line-1-match.txt
pcre2grep -M --color -e 'start[\s]+end' 2-lines-1-match.txt
pcre2grep -M --color -e 'start[\s]+end' 2-lines-ending-with-2-matches.txt
pcre2grep -M -e 'start[\s]+end' 2-lines-ending-with-2-matches.txt
pcre2grep -M -e 'start[\s]+end' 2-lines-starting-with-2-matches.txt
pcre2grep -M --color -e 'start[\s]+end' 2-lines-starting-with-2-matches.txt
--

The grep output looks like this:
--
$ pcre2grep -M --color -e 'start[\s]+end' 1-line-1-match.txt
start end
$ pcre2grep -M --color -e 'start[\s]+end' 2-lines-1-match.txt
start
end
$ pcre2grep -M --color -e 'start[\s]+end' 2-lines-ending-with-2-matches.txt
start
end start end
$ pcre2grep -M -e 'start[\s]+end' 2-lines-ending-with-2-matches.txt
start
end start end
$ pcre2grep -M -e 'start[\s]+end' 2-lines-starting-with-2-matches.txt
start end start
$ pcre2grep -M --color -e 'start[\s]+end' 2-lines-starting-with-2-matches.txt
start end start
end$
--

Commands 1 thru 4 work fine, printing the matching text -- in color when
specified, and across multiple lines where appropriate.

Command 5 (2-lines-starting-with-2-matches.txt, no --color) doesn't work. It
only prints the 1st line, when there should be a 2nd match, spread across lines
1-2.

Command 6 (2-lines-starting-with-2-matches.txt, w/ --color) also doesn't work.
It does print lines 1-2, and the 2 separate matches are colored correctly.
However, after the 2nd match, it fails to print a newline, so the next terminal
prompt appears on the same line. Also, it fails to print the ANSI escape code
to end the coloring -- my terminal ends up w/ a red cursor.

The lack of a newline is especially jarring when the -H or -M commands are
being used -- the info just gets printed on the same line as the colored text.

... One more thing, which may or may not merit a different bug report. Run:

--
echo -e "start end start\n\nend" > 3-lines.txt
pcre2grep -Mn -A 2 --color -e 'start[\s]+end' 3-lines.txt
--

Grep output is:
--
$ pcre2grep -Mn -A 2 --color -e 'start[\s]+end' 3-lines.txt
1:start end start

end2-
3-end
--

In addition to not printing a newline after the multiline colored matching
text, it starts printing context lines that repeat lines it already printed.

--
You are receiving this mail because:
You are on the CC list for the bug.