summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlia Alshanetsky <iliaa@php.net>2005-11-27 06:39:31 +0000
committerIlia Alshanetsky <iliaa@php.net>2005-11-27 06:39:31 +0000
commit497fae9d1f23135ffddd5295f16777acc85af89f (patch)
treebaf5d60ee18537bf73d692a7ae4bfdf1a79690dd
parentef08c58664b87d5f07b2850532eb18c07d35404c (diff)
downloadphp-git-497fae9d1f23135ffddd5295f16777acc85af89f.tar.gz
Fixed bug #35411 (Regression with \{$ handling).
Fixed bug #35382 (Comment in end of file produces fatal error).
-rwxr-xr-xZend/tests/bug31341.phpt2
-rwxr-xr-xZend/tests/bug35411.phpt19
-rw-r--r--Zend/zend_compile.c2
-rw-r--r--Zend/zend_highlight.c6
-rw-r--r--Zend/zend_language_scanner.l18
5 files changed, 37 insertions, 10 deletions
diff --git a/Zend/tests/bug31341.phpt b/Zend/tests/bug31341.phpt
index 2f68006a07..309a54d76b 100755
--- a/Zend/tests/bug31341.phpt
+++ b/Zend/tests/bug31341.phpt
@@ -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
index 0000000000..90957aa57c
--- /dev/null
+++ b/Zend/tests/bug35411.phpt
@@ -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
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index d0642735bf..c40b4845e6 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -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);
diff --git a/Zend/zend_highlight.c b/Zend/zend_highlight.c
index cbd269ed29..d32b79c7b5 100644
--- a/Zend/zend_highlight.c
+++ b/Zend/zend_highlight.c
@@ -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);
diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l
index a5738c37a2..332e5c0bf8 100644
--- a/Zend/zend_language_scanner.l
+++ b/Zend/zend_language_scanner.l
@@ -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':