php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #8247 one line comment ending in ??> vs ???>
Submitted: 2000-12-14 00:29 UTC Modified: 2000-12-17 15:04 UTC
From: boian at bonev dot com Assigned:
Status: Closed Package: Scripting Engine problem
PHP Version: 4.0.3pl1 OS: Linux glibc 2.1
Private report: No CVE-ID: None
 [2000-12-14 00:29 UTC] boian at bonev dot 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>([#]|"//")([^\n\r?]|"?"[^>\n\r])*("?\n"|"?\r\n")? { /* eat one line comments */
+<ST_IN_SCRIPTING>([#]|"//")([^\n\r?'"`]|("?"+[^?>\n\r'"`]))* { /* 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"|"\r\n"|("?"+"\n")|("?"+"\r\n"))? { /* 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>([^'\n\r\\]|[\\][^\n\r])* { /* eat quoted content */
+       yymore();
+}
+
+<ST_ONELINECOMMENT_DQ>([^"\n\r\\]|[\\][^\n\r])* { 
+       yymore();
+}
+
+<ST_ONELINECOMMENT_BQ>([^`\n\r\\]|[\\][^\n\r])* {
+       yymore();
+}
+
+<ST_ONELINECOMMENT_SQ>[']([^\n\r?'"`]|"?"+[^?>\n\r"'`])* { /* end of quoted content */
+       BEGIN(ST_ONELINECOMMENT);
+       yymore();
+}
+
+<ST_ONELINECOMMENT_DQ>["]([^\n\r?'"`]|"?"+[^?>\n\r"'`])* { 
+       BEGIN(ST_ONELINECOMMENT);
+       yymore();
+}
+
+<ST_ONELINECOMMENT_BQ>[`]([^\n\r?'"`]|("?"+[^?>\n\r"'`]))* {
+       BEGIN(ST_ONELINECOMMENT);
+       yymore();
+}
+
+<ST_ONELINECOMMENT_SQ,ST_ONELINECOMMENT_DQ,ST_ONELINECOMMENT_BQ>"\n"|"\r\n" { /* unexpected end of line */
        HANDLE_NEWLINE(yytext[yyleng-1]);
+       BEGIN(ST_IN_SCRIPTING);
        return T_COMMENT;
 }


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2000-12-14 04:10 UTC] stas@php.net
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.
 [2000-12-17 15:04 UTC] andi@php.net
This is fixed in the current CVS (the ??> issue)
Note that // only comments until newline or ?>.
It won't comment ?>. It has been like this since the one line comments were introduced.
Thanks for the bug report.
 
PHP Copyright © 2001-2026 The PHP Group
All rights reserved.
Last updated: Sat Jul 04 13:00:01 2026 UTC