Bläddra i källkod

uneven braces with custom delimiters throws Mustache_Exception_SyntaxException

steve 11 år sedan
förälder
incheckning
6ba77964b8
2 ändrade filer med 35 tillägg och 0 borttagningar
  1. 8 0
      src/Mustache/Tokenizer.php
  2. 27 0
      test/Mustache/Test/TokenizerTest.php

+ 8 - 0
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);
                                 }
                             }
                         }

+ 27 - 0
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,
+                    )
+                )
+            ),
         );
     }
 }