PHP 4.0 Bug #8247 Updated: one line comment ending in ??> vs ???>

From: Date: Thu, 14 Dec 2000 09:10:01 +0000
Subject: PHP 4.0 Bug #8247 Updated: one line comment ending in ??> vs ???>
Groups: php.dev 
Request: Send a blank email to php-dev+get-41306@lists.php.net to get a copy of this message
ID: 8247 Updated by: stas Reported By: boian@bonev.com Old-Status: Open Status: Analyzed Bug Type: Scripting Engine problem Assigned To: Comments: In fact, only ??> case is problematic now. That's because ([#]|"//")([^\n\r?]|"?"[^>\n\r])*("?\n"|"?\r\n")? expression eats any character that is not > after ?. Inlcuding second ?. That should be fixed. Previous Comments: --------------------------------------------------------------------------- [2000-12-14 00:29:16] boian@bonev.com case one: <? // case 1 ??> ?> case two: <? // simple case ???> ?> case three: <? // stoopid_foo("?>"); ?> to resolve the problem(s) i have patched Zend/zend-scanner.l --- /usr/src/php-4.0.3pl1/Zend/zend-scanner.l Thu Oct 5 20:58:46 2000 +++ zend-scanner.l Thu Dec 14 07:16:13 2000 @@ -29,6 +29,10 @@ %x ST_LOOKING_FOR_PROPERTY %x ST_LOOKING_FOR_VARNAME %x ST_COMMENT +%x ST_ONELINECOMMENT +%x ST_ONELINECOMMENT_SQ +%x ST_ONELINECOMMENT_DQ +%x ST_ONELINECOMMENT_BQ %option stack %{ @@ -1154,8 +1158,68 @@ } -<ST_IN_SCRIPTING>([#]|"//")([^nr?]|"?"[^>nr])*("?n"|"?rn")? { /* eat one line comments */ +<ST_IN_SCRIPTING>([#]|"//")([^nr?'"]|("?"+[^?>nr'"]))* { /* begin eating one line comments */ + BEGIN(ST_ONELINECOMMENT); + yymore(); +} + +<ST_ONELINECOMMENT>([']|("?"+['])) { /* eat single quoted comments */ + BEGIN(ST_ONELINECOMMENT_SQ); + yymore(); +} + +<ST_ONELINECOMMENT>(["]|("?"+["])) { /* eat double quoted comments */ + BEGIN(ST_ONELINECOMMENT_DQ); + yymore(); +} + +<ST_ONELINECOMMENT>([]|("?"+[])) { /* eat back quoted comments */ + BEGIN(ST_ONELINECOMMENT_BQ); + yymore(); +} + +<ST_ONELINECOMMENT>("n"|"rn"|("?"+"n")|("?"+"rn"))? { /* unexpected end of line or end of comment */ + HANDLE_NEWLINE(yytext[yyleng-1]); + BEGIN(ST_IN_SCRIPTING); + return T_COMMENT; +} + +<ST_ONELINECOMMENT>"?"+">" { + yyless(yyleng-2); + BEGIN(ST_IN_SCRIPTING); + return T_COMMENT; +} + +<ST_ONELINECOMMENT_SQ>([^'nr\]|[\][^nr])* { /* eat quoted content */ + yymore(); +} + +<ST_ONELINECOMMENT_DQ>([^"nr\]|[\][^nr])* { + yymore(); +} + +<ST_ONELINECOMMENT_BQ>([^`nr\]|[\][^nr])* { + yymore(); +} + +<ST_ONELINECOMMENT_SQ>[']([^nr?'"]|"?"+[^?>nr"'])* { /* end of quoted content */ + BEGIN(ST_ONELINECOMMENT); + yymore(); +} + +<ST_ONELINECOMMENT_DQ>["]([^nr?'"]|"?"+[^?>nr"'])* { + BEGIN(ST_ONELINECOMMENT); + yymore(); +} + +<ST_ONELINECOMMENT_BQ>[]([^nr?'"]|("?"+[^?>nr"'`]))* { + BEGIN(ST_ONELINECOMMENT); + yymore(); +} + +<ST_ONELINECOMMENT_SQ,ST_ONELINECOMMENT_DQ,ST_ONELINECOMMENT_BQ>"n"|"rn" { /* unexpected end of line */ HANDLE_NEWLINE(yytext[yyleng-1]); + BEGIN(ST_IN_SCRIPTING); return T_COMMENT; } --------------------------------------------------------------------------- Full Bug description available at: http://bugs.php.net/?id=8247

« previous php.dev (#41306) next »