# HG changeset patch # User Idan Kamara # Date 1352741223 -7200 # Node ID 1e6b5faf9d4ecc3022e207135e742468467c9b8f # Parent 7f5dab94e48cea28a1a7c6a296d7c07eed5d1db7 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 7f5dab94e48c -r 1e6b5faf9d4e mercurial/commands.py --- a/mercurial/commands.py Wed Nov 07 16:21:39 2012 -0600 +++ b/mercurial/commands.py Mon Nov 12 19:27:03 2012 +0200 @@ -2936,7 +2936,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 7f5dab94e48c -r 1e6b5faf9d4e tests/test-grep.t --- a/tests/test-grep.t Wed Nov 07 16:21:39 2012 -0600 +++ 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