grep: don't go in an infinite loop when given empty regex
authorValentin Gatien-Baron <valentin.gatienbaron@gmail.com>
Sun, 17 May 2020 12:52:43 -0400
changeset 44849 f90957c947f4
parent 44848 7e7080ab8ba8
child 44850 8d552701806d
grep: don't go in an infinite loop when given empty regex Differential Revision: https://phab.mercurial-scm.org/D8543
mercurial/commands.py
tests/test-grep.t
--- a/mercurial/commands.py	Sun May 17 12:49:12 2020 -0400
+++ b/mercurial/commands.py	Sun May 17 12:52:43 2020 -0400
@@ -3428,8 +3428,11 @@
                 m = regexp.search(self.line, p)
                 if not m:
                     break
-                yield m.span()
-                p = m.end()
+                if m.end() == p:
+                    p += 1
+                else:
+                    yield m.span()
+                    p = m.end()
 
     matches = {}
     copies = {}
--- a/tests/test-grep.t	Sun May 17 12:49:12 2020 -0400
+++ b/tests/test-grep.t	Sun May 17 12:52:43 2020 -0400
@@ -660,7 +660,7 @@
   $ echo 'added, missing' > added-missing; hg add added-missing; rm added-missing
   $ echo 'untracked' > untracked
   $ hg rm old
-  $ hg grep '[^Z]'
+  $ hg grep ''
   added:added
   new:something else
   new:modified