[PATCH stable] grep: don't search past the end of the searched string
Idan Kamara
idankk86 at gmail.com
Mon Nov 12 17:31:26 UTC 2012
# HG changeset patch
# User Idan Kamara <idankk86 at gmail.com>
# Date 1352741223 -7200
# Branch stable
# Node ID c9f7f4a22005002acf88d22e12178306910197cd
# Parent ce2c709a8e908747376a3fda6059c1f81de321e7
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
@@ -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 --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 @@
simple
+ $ hg grep '.*'
+ port:4:export
+ port:4:vaportight
+ port:4:import/export
$ hg grep port port
port:4:export
port:4:vaportight
More information about the Mercurial-devel
mailing list