]> granicus.if.org Git - php/commitdiff
Fixed bug #35411 (Regression with \{$ handling).
authorIlia Alshanetsky <iliaa@php.net>
Sun, 27 Nov 2005 06:39:31 +0000 (06:39 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Sun, 27 Nov 2005 06:39:31 +0000 (06:39 +0000)
Fixed bug #35382 (Comment in end of file produces fatal error).

Zend/tests/bug31341.phpt
Zend/tests/bug35411.phpt [new file with mode: 0755]
Zend/zend_compile.c
Zend/zend_highlight.c
Zend/zend_language_scanner.l

index 2f68006a07782f02808280fedfe2324af478a516..309a54d76b2e572ef538073302f713a28a1bf843 100755 (executable)
@@ -20,7 +20,7 @@ foreach ($a as $v) {
 --EXPECT--
 '$     \{    '
 '      \{   $'
-'      {$   '
+'      \{$   '
 '      $\{   '
 '      $\{  '
 '      \{$  '
diff --git a/Zend/tests/bug35411.phpt b/Zend/tests/bug35411.phpt
new file mode 100755 (executable)
index 0000000..90957aa
--- /dev/null
@@ -0,0 +1,19 @@
+--TEST--
+Bug #35411 (Regression with \{$ handling)
+--FILE--
+<?php
+$abc = "bar";
+echo "foo\{$abc}baz\n";
+echo "foo\{ $abc}baz\n";
+echo <<<TEST
+foo{$abc}baz
+foo\{$abc}baz
+foo\{ $abc}baz
+TEST;
+?>
+--EXPECT--
+foo\{bar}baz
+foo\{ bar}baz
+foobarbaz
+foo\{bar}baz
+foo\{ bar}baz
index d0642735bfb624f5ad7efc46a505b8b302644bd0..c40b4845e6632a031ff25849aab3b1389f50d98d 100644 (file)
@@ -3998,6 +3998,8 @@ again:
                case T_END_HEREDOC:
                        efree(zendlval->u.constant.value.str.val);
                        break;
+               case EOF:
+                       return EOF;
        }
                
        INIT_PZVAL(&zendlval->u.constant);
index cbd269ed29eefed627564b4991914bf2b46addf4..d32b79c7b5cc0a2406dbf7a837d237834a84a183 100644 (file)
@@ -164,6 +164,8 @@ ZEND_API void zend_highlight(zend_syntax_highlighter_ini *syntax_highlighter_ini
 
                if (token.type == IS_STRING) {
                        switch (token_type) {
+                               case EOF:
+                                       goto done;
                                case T_OPEN_TAG:
                                case T_OPEN_TAG_WITH_ECHO:
                                case T_CLOSE_TAG:
@@ -180,6 +182,7 @@ ZEND_API void zend_highlight(zend_syntax_highlighter_ini *syntax_highlighter_ini
                }
                token.type = 0;
        }
+done:
        if (last_color != syntax_highlighter_ini->highlight_html) {
                zend_printf("</span>\n");
        }
@@ -208,6 +211,9 @@ ZEND_API void zend_strip(TSRMLS_D)
                        case T_DOC_COMMENT:
                                token.type = 0;
                                continue;
+
+                       case EOF:
+                               return;
                        
                        case T_END_HEREDOC: {
                                        char *ptr = LANG_SCNG(yy_text);
index a5738c37a23ffa041dd8196f909b5917355c55a8..332e5c0bf8b16039ba5f519475eceff0a33b6cc0 100644 (file)
@@ -1469,8 +1469,8 @@ NEWLINE ("\r"|"\n"|"\r\n")
        zendlval->value.str.val = yytext; /* no copying - intentional */
        zendlval->value.str.len = yyleng;
        zendlval->type = IS_STRING;
-       BEGIN(ST_IN_SCRIPTING);
-       return T_COMMENT;
+       BEGIN(INITIAL);
+       return EOF;
 }
 
 <ST_ONE_LINE_COMMENT>{NEWLINE} {
@@ -1806,6 +1806,13 @@ NEWLINE ("\r"|"\n"|"\r\n")
        return yytext[0];
 }
 
+<ST_DOUBLE_QUOTES,ST_BACKQUOTE,ST_HEREDOC>"\\{" {
+       zendlval->value.str.val = estrndup("\\{", sizeof("\\{") - 1);
+       zendlval->value.str.len = sizeof("\\{") - 1;
+       zendlval->type = IS_STRING;
+       return T_STRING;
+}
+
 <ST_DOUBLE_QUOTES,ST_BACKQUOTE,ST_HEREDOC>"{$" {
        zendlval->value.lval = (long) yytext[0];
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
@@ -1844,13 +1851,6 @@ NEWLINE ("\r"|"\n"|"\r\n")
        return T_CHARACTER;
 }
 
-<ST_DOUBLE_QUOTES,ST_BACKQUOTE,ST_HEREDOC>"\\{$" {
-       zendlval->value.str.val = estrndup("{$", sizeof("{$")-1);
-       zendlval->value.str.len = sizeof("{$")-1;
-       zendlval->type = IS_STRING;
-       return T_STRING;
-}
-
 <ST_DOUBLE_QUOTES,ST_BACKQUOTE,ST_HEREDOC>"\\"{ANY_CHAR} {
        switch (yytext[1]) {
                case 'n':