# HG changeset patch # User Idan Kamara # Date 2012-11-12 17:27:03 # 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 --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -2936,7 +2936,7 @@ def grep(ui, repo, pattern, *pats, **opt 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 --git a/tests/test-grep.t b/tests/test-grep.t --- a/tests/test-grep.t +++ b/tests/test-grep.t @@ -23,6 +23,10 @@ pattern error simple + $ hg grep '.*' + port:4:export + port:4:vaportight + port:4:import/export $ hg grep port port port:4:export port:4:vaportight