templater: fix crash by empty group expression
authorYuya Nishihara <yuya@tcha.org>
Tue, 16 Jan 2018 23:50:01 +0900
changeset 35744 8685192a8733
parent 35743 3c2a6246fd63
child 35745 3bd8ab4c80a5
templater: fix crash by empty group expression 'exp' may be None because of '(group None)' node. The error message is copied from revset.py.
mercurial/templater.py
tests/test-command-template.t
--- a/mercurial/templater.py	Tue Jan 16 21:46:17 2018 +0900
+++ b/mercurial/templater.py	Tue Jan 16 23:50:01 2018 +0900
@@ -259,6 +259,8 @@
 
 def compileexp(exp, context, curmethods):
     """Compile parsed template tree to (func, data) pair"""
+    if not exp:
+        raise error.ParseError(_("missing argument"))
     t = exp[0]
     if t in curmethods:
         return curmethods[t](exp, context)
--- a/tests/test-command-template.t	Tue Jan 16 21:46:17 2018 +0900
+++ b/tests/test-command-template.t	Tue Jan 16 23:50:01 2018 +0900
@@ -2766,6 +2766,16 @@
   hg: parse error at 6: invalid token
   [255]
 
+  $ hg log -T '{}'
+  hg: parse error at 2: not a prefix: end
+  [255]
+  $ hg debugtemplate -v '{()}'
+  (template
+    (group
+      None))
+  hg: parse error: missing argument
+  [255]
+
 Behind the scenes, this will throw TypeError
 
   $ hg log -l 3 --template '{date|obfuscate}\n'