Browse Source

Fixed bug #35411 (Regression with \{$ handling).

Fixed bug #35382 (Comment in end of file produces fatal error).
PHP-5.1
Ilia Alshanetsky 20 years ago
parent
commit
497fae9d1f
  1. 2
      Zend/tests/bug31341.phpt
  2. 19
      Zend/tests/bug35411.phpt
  3. 2
      Zend/zend_compile.c
  4. 6
      Zend/zend_highlight.c
  5. 18
      Zend/zend_language_scanner.l

2
Zend/tests/bug31341.phpt

@ -20,7 +20,7 @@ foreach ($a as $v) {
--EXPECT--
'$ \{ '
' \{ $'
' {$ '
' \{$ '
' $\{ '
' $\{ '
' \{$ '

19
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

2
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);

6
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);

18
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':

Loading…
Cancel
Save