# HG changeset patch # User Idan Kamara # Date 1352741223 -7200 # Node ID 35ba170c0f82dba18f0207ef4bd93216e6de8bbf # Parent 45bd0cd7ca04f8cda0a61cddded8838dd312675a grep: don't search past the end of the searched string '*' causes the resulting RE to match 0 or more repetitions of the preceding RE: >>> bool(re.search('.*', '')) >>> True This causes an infinite loop because currently we're only checking if there was a match without looking at where we are in the searched string. diff -r 45bd0cd7ca04 -r 35ba170c0f82 mercurial/commands.py --- a/mercurial/commands.py Tue Nov 13 08:41:56 2012 -0800 +++ b/mercurial/commands.py Mon Nov 12 19:27:03 2012 +0200 @@ -2935,7 +2935,7 @@ def matchlines(body): begin = 0 linenum = 0 - while True: + while True and begin < len(body): match = regexp.search(body, begin) if not match: break diff -r 45bd0cd7ca04 -r 35ba170c0f82 tests/test-grep.t --- a/tests/test-grep.t Tue Nov 13 08:41:56 2012 -0800 +++ b/tests/test-grep.t Mon Nov 12 19:27:03 2012 +0200 @@ -23,6 +23,10 @@ simple + $ hg grep '.*' + port:4:export + port:4:vaportight + port:4:import/export $ hg grep port port port:4:export port:4:vaportight