diff options
author | Tim Hatch <tim@timhatch.com> | 2016-06-01 21:22:44 -0700 |
---|---|---|
committer | Tim Hatch <tim@timhatch.com> | 2016-06-01 21:22:44 -0700 |
commit | 7654e964ef10b3a48d4d7d9452b8492ab29ae218 (patch) | |
tree | 12a75688db2bea2cf39d127f9011e5a0aecb021e | |
parent | d001c12058bfe796e618bbf31e33ca8880edaab4 (diff) | |
download | pygments-7654e964ef10b3a48d4d7d9452b8492ab29ae218.tar.gz |
Prevent runaway escapes in php string.
Fixes #1184
-rw-r--r-- | pygments/lexers/php.py | 2 | ||||
-rw-r--r-- | tests/test_php.py | 36 |
2 files changed, 37 insertions, 1 deletions
diff --git a/pygments/lexers/php.py b/pygments/lexers/php.py index 2421738f..1931325a 100644 --- a/pygments/lexers/php.py +++ b/pygments/lexers/php.py @@ -224,7 +224,7 @@ class PhpLexer(RegexLexer): String.Interpol)), (r'(\$\{)(\S+)(\})', bygroups(String.Interpol, Name.Variable, String.Interpol)), - (r'[${\\]+', String.Double) + (r'[${\\]', String.Double) ], } diff --git a/tests/test_php.py b/tests/test_php.py new file mode 100644 index 00000000..050ca70d --- /dev/null +++ b/tests/test_php.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +""" + PHP Tests + ~~~~~~~~~ + + :copyright: Copyright 2006-2015 by the Pygments team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +import unittest + +from pygments.lexers import PhpLexer +from pygments.token import Token + + +class PhpTest(unittest.TestCase): + def setUp(self): + self.lexer = PhpLexer() + + def testStringEscapingRun(self): + fragment = '<?php $x="{\\""; ?>\n' + tokens = [ + (Token.Comment.Preproc, '<?php'), + (Token.Text, ' '), + (Token.Name.Variable, '$x'), + (Token.Operator, '='), + (Token.Literal.String.Double, '"'), + (Token.Literal.String.Double, '{'), + (Token.Literal.String.Escape, '\\"'), + (Token.Literal.String.Double, '"'), + (Token.Punctuation, ';'), + (Token.Text, ' '), + (Token.Comment.Preproc, '?>'), + (Token.Other, '\n'), + ] + self.assertEqual(tokens, list(self.lexer.get_tokens(fragment))) |