added an exception when a macro re-uses the same argument name twice
authorFabien Potencier <fabien.potencier@gmail.com>
Sat, 3 Aug 2013 16:18:15 +0000 (18:18 +0200)
committerFabien Potencier <fabien.potencier@gmail.com>
Sat, 3 Aug 2013 16:20:18 +0000 (18:20 +0200)
lib/Twig/ExpressionParser.php

index 09d16dd..1687e11 100644 (file)
@@ -482,7 +482,7 @@ class Twig_ExpressionParser
                     $value = $this->parsePrimaryExpression();
 
                     if (!$this->checkConstantExpression($value)) {
-                        throw new Twig_Error_Syntax(sprintf('A default value for an argument must be a constant (a boolean, a string, a number, or an array).'), $token->getLine(), $this->parser->getFilename());
+                        throw new Twig_Error_Syntax('A default value for an argument must be a constant (a boolean, a string, a number, or an array).', $token->getLine(), $this->parser->getFilename());
                     }
                 } else {
                     $value = $this->parseExpression();
@@ -497,6 +497,10 @@ class Twig_ExpressionParser
             if (null === $name) {
                 $args[] = $value;
             } else {
+                if ($definition && isset($args[$name])) {
+                    throw new Twig_Error_Syntax(sprintf('Arguments cannot contain the same argument name more than once ("%s" is defined twice).', $name), $token->getLine(), $this->parser->getFilename());
+                }
+
                 $args[$name] = $value;
             }
         }