From 6ba77964b8a687e67276888d2f516ff70787663c Mon Sep 17 00:00:00 2001 From: steve Date: Thu, 19 Jun 2014 23:25:46 -0700 Subject: [PATCH] uneven braces with custom delimiters throws Mustache_Exception_SyntaxException --- src/Mustache/Tokenizer.php | 8 ++++++++ test/Mustache/Test/TokenizerTest.php | 27 +++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/src/Mustache/Tokenizer.php b/src/Mustache/Tokenizer.php index f8b7608..fa834d9 100644 --- a/src/Mustache/Tokenizer.php +++ b/src/Mustache/Tokenizer.php @@ -179,6 +179,14 @@ class Mustache_Tokenizer $lastName = $token[self::NAME]; if (substr($lastName, -1) === '}') { $token[self::NAME] = trim(substr($lastName, 0, -1)); + } else { + $msg = sprintf( + 'Uneven closing tag encountered: %s on line %d', + substr($lastName, -1), + $token[self::LINE] + ); + + throw new Mustache_Exception_SyntaxException($msg, $token); } } } diff --git a/test/Mustache/Test/TokenizerTest.php b/test/Mustache/Test/TokenizerTest.php index 34fa86d..67df941 100644 --- a/test/Mustache/Test/TokenizerTest.php +++ b/test/Mustache/Test/TokenizerTest.php @@ -35,6 +35,17 @@ class Mustache_Test_TokenizerTest extends PHPUnit_Framework_TestCase $tokenizer->scan($text, null); } + /** + * @expectedException Mustache_Exception_SyntaxException + */ + public function testUnevenBracesWithCustomDelimiterThrowExceptions() + { + $tokenizer = new Mustache_Tokenizer; + + $text = "<%{ name %>"; + $tokenizer->scan($text, "<% %>"); + } + public function getTokens() { return array( @@ -246,6 +257,22 @@ class Mustache_Test_TokenizerTest extends PHPUnit_Framework_TestCase ), ) ), + + // unescaped custom delimiters are properly parsed + array( + "<%{ a }%>", + "<% %>", + array( + array( + Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_UNESCAPED, + Mustache_Tokenizer::NAME => 'a', + Mustache_Tokenizer::OTAG => '<%', + Mustache_Tokenizer::CTAG => '%>', + Mustache_Tokenizer::LINE => 0, + Mustache_Tokenizer::INDEX => 9, + ) + ) + ), ); } }