templater: reject bad fillchar argument passed to pad()
authorYuya Nishihara <yuya@tcha.org>
Sat, 18 Mar 2017 20:38:44 +0900
changeset 31519 3725986b151a
parent 31518 43d6ef658874
child 31520 6f150bb19317
templater: reject bad fillchar argument passed to pad() Otherwise TypeError would be raised.
mercurial/templater.py
tests/test-command-template.t
--- a/mercurial/templater.py	Sat Mar 18 20:11:15 2017 +0900
+++ b/mercurial/templater.py	Sat Mar 18 20:38:44 2017 +0900
@@ -575,6 +575,9 @@
     fillchar = ' '
     if len(args) > 2:
         fillchar = evalstring(context, mapping, args[2])
+        if len(fillchar) != 1:
+            # i18n: "pad" is a keyword
+            raise error.ParseError(_("pad() expects a single fill character"))
     if len(args) > 3:
         left = evalboolean(context, mapping, args[3])
 
--- a/tests/test-command-template.t	Sat Mar 18 20:11:15 2017 +0900
+++ b/tests/test-command-template.t	Sat Mar 18 20:38:44 2017 +0900
@@ -3521,6 +3521,15 @@
   hg: parse error: pad() expects an integer width
   [255]
 
+Test invalid fillchar passed to pad function
+
+  $ hg log -r 0 -T '{pad(rev, 10, "")}\n'
+  hg: parse error: pad() expects a single fill character
+  [255]
+  $ hg log -r 0 -T '{pad(rev, 10, "--")}\n'
+  hg: parse error: pad() expects a single fill character
+  [255]
+
 Test boolean argument passed to pad function
 
  no crash