changeset 27135:4ca98a389152 stable

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.
author Matt Harbison <matt_harbison@yahoo.com>
date Mon, 05 Oct 2015 12:37:26 -0400
parents 93bfa9fc96e3
children 5a84a453b503
files mercurial/templater.py tests/test-command-template.t
diffstat 2 files changed, 6 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/templater.py
+++ b/mercurial/templater.py
@@ -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
+++ b/tests/test-command-template.t
@@ -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