Fix stack traces not being highlighted correctly.

Fixes #3439
This commit is contained in:
mark_story 2012-12-08 20:48:13 -05:00
parent 6cf6903982
commit 1e49be3472
2 changed files with 28 additions and 10 deletions

View file

@ -84,7 +84,13 @@ class DebuggerTest extends CakeTestCase {
$this->assertTrue(is_array($result));
$this->assertEquals(4, count($result));
$pattern = '/<code><span style\="color\: \#\d+">.*?&lt;\?php/';
$pattern = '/<code>.*?<span style\="color\: \#\d+">.*?&lt;\?php/';
$this->assertRegExp($pattern, $result[0]);
$result = Debugger::excerpt(__FILE__, 10, 2);
$this->assertEquals(5, count($result));
$pattern = '/<span style\="color\: \#\d{6}">\*<\/span>/';
$this->assertRegExp($pattern, $result[0]);
$return = Debugger::excerpt('[internal]', 2, 2);

View file

@ -396,12 +396,14 @@ class Debugger {
return array();
}
$data = file_get_contents($file);
if (!empty($data) && strpos($data, "\n") !== false) {
if (empty($data)) {
return $lines;
}
if (strpos($data, "\n") !== false) {
$data = explode("\n", $data);
}
if (empty($data) || !isset($data[$line])) {
return;
if (!isset($data[$line])) {
return $lines;
}
for ($i = $line - ($context + 1); $i < $line + $context; $i++) {
if (!isset($data[$i])) {
@ -425,13 +427,23 @@ class Debugger {
* @return string
*/
protected static function _highlight($str) {
static $supportHighlight = null;
if (!$supportHighlight && function_exists('hphp_log')) {
$supportHighlight = false;
if (function_exists('hphp_log')) {
return htmlentities($str);
}
$supportHighlight = true;
return highlight_string($str, true);
$added = false;
if (strpos($str, '<?php') === false) {
$added = true;
$str = "<?php \n" . $str;
}
$highlight = highlight_string($str, true);
if ($added) {
$highlight = str_replace(
'&lt;?php&nbsp;<br />',
'',
$highlight
);
}
return $highlight;
}
/**