From 1230c210dc0565de031db86ea958f509d1ea8b67 Mon Sep 17 00:00:00 2001 From: Angelo Vargas Date: Wed, 22 Sep 2010 18:33:55 -0700 Subject: [PATCH] fixed error handling for if tag when a syntax error occurs within a subparse process (closes #131) --- CHANGELOG | 1 + lib/Twig/TokenParser/If.php | 39 +++++++++++++++++---------------------- 2 files changed, 18 insertions(+), 22 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 3c3588b..d045514 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -5,6 +5,7 @@ Backward incompatibilities: * the odd and even filters are now tests: {{ foo|odd }} must now be written {{ foo is odd }} + * fixed error handling for if tag when a syntax error occurs within a subparse process * added a way to implement custom logic for resolving token parsers given a tag name * fixed js escaper to be stricter (now uses a whilelist-based js escaper) * added a "constant" filter diff --git a/lib/Twig/TokenParser/If.php b/lib/Twig/TokenParser/If.php index d4f38b0..2cc61b9 100644 --- a/lib/Twig/TokenParser/If.php +++ b/lib/Twig/TokenParser/If.php @@ -29,31 +29,26 @@ class Twig_TokenParser_If extends Twig_TokenParser $end = false; while (!$end) { - try - { - switch ($this->parser->getStream()->next()->getValue()) { - case 'else': - $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE); - $else = $this->parser->subparse(array($this, 'decideIfEnd')); - break; + switch ($this->parser->getStream()->next()->getValue()) { + case 'else': + $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE); + $else = $this->parser->subparse(array($this, 'decideIfEnd')); + break; - case 'elseif': - $expr = $this->parser->getExpressionParser()->parseExpression(); - $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE); - $body = $this->parser->subparse(array($this, 'decideIfFork')); - $tests[] = $expr; - $tests[] = $body; - break; + case 'elseif': + $expr = $this->parser->getExpressionParser()->parseExpression(); + $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE); + $body = $this->parser->subparse(array($this, 'decideIfFork')); + $tests[] = $expr; + $tests[] = $body; + break; - case 'endif': - $end = true; - break; + case 'endif': + $end = true; + break; - default: - throw new Twig_SyntaxError('', -1); - } - } catch (Twig_SyntaxError $e) { - throw new Twig_SyntaxError(sprintf('Unexpected end of template. Twig was looking for the following tags "else", "elseif", or "endif" to close the "if" block started at line %d)', $lineno), -1); + default: + throw new Twig_SyntaxError(sprintf('Unexpected end of template. Twig was looking for the following tags "else", "elseif", or "endif" to close the "if" block started at line %d)', $lineno), -1); } } -- 1.7.2.5