[PATCH stable] grep: don't search past the end of the searched string

Idan Kamara idankk86 at gmail.com
Tue Nov 13 11:10:38 CST 2012


# HG changeset patch
# User Idan Kamara <idankk86 at gmail.com>
# Date 1352826521 -7200
# Branch stable
# Node ID 42cd03020d6d6cbbab5270d8d8bc96aa9324a5e1
# 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 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