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
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: boian at bonev dot com
New email:
PHP Version: OS:

 

 [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