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

Augie Fackler raf at durin42.com
Mon Nov 12 14:18:39 CST 2012


queued, thanks

On Nov 12, 2012, at 11:31 AM, Idan Kamara <idankk86 at gmail.com> wrote:

> # 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
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel



More information about the Mercurial-devel mailing list