mirror of
https://https.git.savannah.gnu.org/git/coreutils.git
synced 2026-01-26 15:29:07 +00:00
ptx: avoid infloop due to zero-length matches with -S regex
* src/ptx.c (find_occurs_in_text): Die with an appropriate error diagnostic when the given regular expression returns a match of length 0. * tests/misc/ptx.pl (S-infloop): Add a test. * NEWS (Bug fixes): Mention the fix. Fixes https://bugs.gnu.org/28417 which was detected using Symbolic Execution techniques developed in the course of the SYMBIOSYS research project at COMSYS, RWTH Aachen University.
This commit is contained in:
parent
5d9d07bbb1
commit
97c5045435
5
NEWS
5
NEWS
@ -2,6 +2,11 @@ GNU coreutils NEWS -*- outline -*-
|
||||
|
||||
* Noteworthy changes in release ?.? (????-??-??) [?]
|
||||
|
||||
** Bug fixes
|
||||
|
||||
ptx -S no longer infloops for a pattern which returns zero-length matches.
|
||||
[the bug dates back to the initial implementation]
|
||||
|
||||
|
||||
* Noteworthy changes in release 8.28 (2017-09-01) [stable]
|
||||
|
||||
|
||||
@ -818,6 +818,11 @@ find_occurs_in_text (int file_index)
|
||||
case -1:
|
||||
break;
|
||||
|
||||
case 0:
|
||||
die (EXIT_FAILURE, 0,
|
||||
_("error: regular expression has a match of length zero: %s"),
|
||||
quote (context_regex.string));
|
||||
|
||||
default:
|
||||
next_context_start = cursor + context_regs.end[0];
|
||||
break;
|
||||
|
||||
@ -40,6 +40,12 @@ my @Tests =
|
||||
{OUT=>".xx \"\" \"\" \"foo\" \"\"\n"}],
|
||||
["format-t", '--format=tex', {IN=>"foo\n"},
|
||||
{OUT=>"\\xx {}{}{foo}{}{}\n"}],
|
||||
|
||||
# with coreutils-8.28 and earlier, the -S option would infloop with
|
||||
# matches of zero-length.
|
||||
["S-infloop", '-S ^', {IN=>"a\n"}, {EXIT=>1},
|
||||
{ERR_SUBST=>'s/^.*reg.*ex.*length zero.*$/regexlzero/'},
|
||||
{ERR=>"regexlzero\n"}],
|
||||
);
|
||||
|
||||
@Tests = triple_test \@Tests;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user