templater: protect word() from crashing on out of range negative value stable
authorMatt Harbison <matt_harbison@yahoo.com>
Mon, 05 Oct 2015 12:37:26 -0400
branchstable
changeset 26502 4ca98a389152
parent 26419 93bfa9fc96e3
child 26503 5a84a453b503
templater: protect word() from crashing on out of range negative value The function isn't documented to work with negative values at all, but it does, which can be useful. However, the range check didn't account for this.
mercurial/templater.py
tests/test-command-template.t
--- a/mercurial/templater.py	Thu Oct 01 12:07:20 2015 -0500
+++ b/mercurial/templater.py	Mon Oct 05 12:37:26 2015 -0400
@@ -649,7 +649,7 @@
         splitter = None
 
     tokens = text.split(splitter)
-    if num >= len(tokens):
+    if num >= len(tokens) or num < -len(tokens):
         return ''
     else:
         return tokens[num]
--- a/tests/test-command-template.t	Thu Oct 01 12:07:20 2015 -0500
+++ b/tests/test-command-template.t	Mon Oct 05 12:37:26 2015 -0400
@@ -3368,6 +3368,11 @@
   hg: parse error: word expects an integer index
   [255]
 
+Test word for out of range
+
+  $ hg log -R a --template "{word(10000, desc)}"
+  $ hg log -R a --template "{word(-10000, desc)}"
+
 Test indent and not adding to empty lines
 
   $ hg log -T "-----\n{indent(desc, '>> ', ' > ')}\n" -r 0:1 -R a