changeset 25782:babd2c93bd99

templater: check existence of closing brace of template string
author Yuya Nishihara <yuya@tcha.org>
date Mon, 15 Jun 2015 23:03:30 +0900
parents 82c918509ef5
children 1f6878c87c25
files mercurial/templater.py tests/test-command-template.t
diffstat 2 files changed, 7 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/templater.py	Mon Jun 15 22:55:34 2015 +0900
+++ b/mercurial/templater.py	Mon Jun 15 23:03:30 2015 +0900
@@ -120,12 +120,12 @@
             yield ('symbol', sym, s)
             pos -= 1
         elif c == '}':
-            pos += 1
-            break
+            yield ('end', None, pos + 1)
+            return
         else:
             raise error.ParseError(_("syntax error"), pos)
         pos += 1
-    yield ('end', None, pos)
+    raise error.ParseError(_("unterminated template expansion"), start)
 
 def _parsetemplate(tmpl, start, stop):
     parsed = []
--- a/tests/test-command-template.t	Mon Jun 15 22:55:34 2015 +0900
+++ b/tests/test-command-template.t	Mon Jun 15 23:03:30 2015 +0900
@@ -2513,6 +2513,10 @@
   abort: t:3: unmatched quotes
   [255]
 
+  $ hg log -T '{date'
+  hg: parse error at 1: unterminated template expansion
+  [255]
+
 Behind the scenes, this will throw TypeError
 
   $ hg log -l 3 --template '{date|obfuscate}\n'