ID:               25725
 Comment by:       keithm at aoeex dot com
 Reported By:      kjartan at zind dot net
 Status:           Bogus
 Bug Type:         Scripting Engine problem
 Operating System: *
 PHP Version:      4CVS, 5CVS
 New Comment:

This bug is not bogus.  We are experiencing it semi-randomly with our
pastebin code at http://dalphp.shoggoth.net/pastebin.php
(http://dalphp.shoggoth.net/pastebin_view.php?356 is one post being
affected)

The code that is paste is generating the warning for \'s which are
valid.  In this case, the \ in the \n in the print statements.

Here's some debugging code/output I added to see if this was a bug or
not.

-=-=-= code -=-=-=-=-
$src=implode("\n", $Source);
echo '<!-- Source: ', NL, $src, '-->';
if (strpos($src, '<?php') !== false || strpos($src, '<?') !== false){
  $source=highlight_string($src, 1);
  echo '<!-- Source 2: ', NL, $source, ' -->';
  $source=str_replace(array('<code>', '</code>'), '', $source);
}
else {
  $source=nl2br(htmlentities($src));
}
echo $src;
-=-=-=-=-=-=-=-=-=-=-

-=-=-= output -=-=-=-=-
<!-- Source: 
<?php

/* Trying to figure out wtf is thrown when an array is accessed out of
bounds. */

print "Before!\n";
    
try {
    print "Trying!\n";
    $x = array(1, 2, 3);
    print_r($x);
    $y = $x[3];
    print_r($y);
}
catch(Exception $e) {
    print "Cought!\n";
    print_r($e);
}

print "Done!\n";

/* Expected output:
 *   Before!
 *   Trying!
 *   Array ( etc.
 *   Cought!
 *   Object ( etc.
 *   Done!
 *
 * Actual output:
 *   Before!
 *   Trying!
 *   Array ( etc.
 *   Done!
 */

?>--><!-- Source 2: 
<code><font color="#000000">
<font color="#0000BB">&lt;?php<br /><br />/* Trying to figure out wtf
is thrown when an array is accessed out of bounds. */<br /><br />print
</font><font color="#DD0000">"Before!<br />
<b>Warning</b>:  Unexpected character in input:  '\' (ASCII=92) state=1
in <b>/home/trollboy/public_html/dalphp/pastebin_view.php</b> on line
<b>153</b><br />
n";<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />try {<br
/>&nbsp;&nbsp;&nbsp;&nbsp;print "Trying!<br />
<b>Warning</b>:  Unexpected character in input:  '\' (ASCII=92) state=1
in <b>/home/trollboy/public_html/dalphp/pastebin_view.php</b> on line
<b>153</b><br />
n"</font><font color="#0000BB">;<br />&nbsp;&nbsp;&nbsp;&nbsp;$x =
array(1, 2, 3);<br />&nbsp;&nbsp;&nbsp;&nbsp;print_r($x);<br
/>&nbsp;&nbsp;&nbsp;&nbsp;$y = $x</font><font
color="#007700">[</font><font color="#0000BB">3</font><font
color="#007700">]</font><font color="#0000BB">;<br
/>&nbsp;&nbsp;&nbsp;&nbsp;print_r($y);<br /></font><font
color="#007700">}</font><font color="#0000BB"><br />catch(Exception $e)
</font><font color="#007700">{</font><font color="#0000BB"><br
/>&nbsp;&nbsp;&nbsp;&nbsp;print </font><font
color="#DD0000">"Cought!<br />
<b>Warning</b>:  Unexpected character in input:  '\' (ASCII=92) state=1
in <b>/home/trollboy/public_html/dalphp/pastebin_view.php</b> on line
<b>153</b><br />
n"</font><font color="#0000BB">;<br
/>&nbsp;&nbsp;&nbsp;&nbsp;print_r($e);<br /></font><font
color="#007700">}</font><font color="#0000BB"><br /><br />print
</font><font color="#DD0000">"Done!<br />
<b>Warning</b>:  Unexpected character in input:  '\' (ASCII=92) state=1
in <b>/home/trollboy/public_html/dalphp/pastebin_view.php</b> on line
<b>153</b><br />
n"</font><font color="#0000BB">;<br /><br />/* Expected output:<br />
*&nbsp;&nbsp;&nbsp;Before!<br /> *&nbsp;&nbsp;&nbsp;Trying!<br />
*&nbsp;&nbsp;&nbsp;Array ( etc.<br /> *&nbsp;&nbsp;&nbsp;Cought!<br />
*&nbsp;&nbsp;&nbsp;Object ( etc.<br /> *&nbsp;&nbsp;&nbsp;Done!<br />
*<br /> * Actual output:<br /> *&nbsp;&nbsp;&nbsp;Before!<br />
*&nbsp;&nbsp;&nbsp;Trying!<br /> *&nbsp;&nbsp;&nbsp;Array ( etc.<br />
*&nbsp;&nbsp;&nbsp;Done!<br /> */<br /><br />?&gt;</font>
</font>
</code> -->
-=-=-=-=-=-=-=-=-=-=-=-


As you can see, the highlight_string call is causing the warning to be
injected into the source where they should not be.  The code is fine
under normal circumstances.


Previous Comments:
------------------------------------------------------------------------

[2003-10-02 20:56:57] [EMAIL PROTECTED]

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

The warning you are seeing is a lexical parser warning, it cannot be
avoided simply because it is the same parser as the one parsing normal
PHP source. If PHP were to execute the file it too would strip/ignore
the \ character.

------------------------------------------------------------------------

[2003-10-02 17:03:45] kjartan at zind dot net

Doing @highlight_string seems to work to, but it strips the \. Might
not fixing, but it still seems like a bug.

------------------------------------------------------------------------

[2003-10-02 16:51:07] [EMAIL PROTECTED]

If you just want to suppress warnings, error_reporting(0) might help
you. I'm not sure if this needs to be fixed anyhow though...


------------------------------------------------------------------------

[2003-10-02 07:17:27] kjartan at zind dot net

Description:
------------
Given a string that contains this PHP code:

<?php
$a = 2;
\;
$b = 3;
?>

Then highlight_string() generates this:

<?php
$a = 2;

Warning: Unexpected character in input:  '\' (ASCII=92) state=1 in
/home/kjartan/scripts/highlight_string on line 9
;
$b = 3;
?>

Granted its not valid PHP, but should hightlight_string() function as a
PHP validation system? Not that it does a good job at it as this gets
colored just fine:

<?php
$a = 2
$b = 3
$c = 5
?>

What gives?

Reproduce code:
---------------
<?php
$string = '<?php
$a = 2;
\
$c = 5;
?>';

highlight_string($string);


Expected result:
----------------
I expect it to just leave the \ alone and not cause warnings.



------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=25725&edit=1

Reply via email to