aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Fischer <bantu@phpbb.com>2011-09-18 00:55:24 +0200
committerAndreas Fischer <bantu@phpbb.com>2011-09-18 22:23:41 +0200
commit7b3f6cb219cac448ba470f016ed5068bdc7ffc56 (patch)
tree3430398dfb2211a838b9b36a38cf0311fe6d2bc4
parentMerge remote-tracking branch 'galaxyAbstractor/ticket/10324' into develop-oly... (diff)
downloadphpbb-7b3f6cb219cac448ba470f016ed5068bdc7ffc56.tar.gz
phpbb-7b3f6cb219cac448ba470f016ed5068bdc7ffc56.tar.bz2
phpbb-7b3f6cb219cac448ba470f016ed5068bdc7ffc56.zip
[ticket/10369] Always include errfile and errline in format_errors().
We remove the phpBB root path from errfile. This is consistent with how msg_handler handles E_WARNING messages etc. PHPBB3-10369
-rw-r--r--phpBB/includes/error_collector.php14
-rw-r--r--tests/error_collector_test.php35
2 files changed, 44 insertions, 5 deletions
diff --git a/phpBB/includes/error_collector.php b/phpBB/includes/error_collector.php
index 55834f354c..534df27ece 100644
--- a/phpBB/includes/error_collector.php
+++ b/phpBB/includes/error_collector.php
@@ -42,6 +42,8 @@ class phpbb_error_collector
function format_errors()
{
+ $phpbb_root_path = phpbb_realpath(dirname(__FILE__) . '/../');
+
$text = '';
foreach ($this->errors as $error)
{
@@ -49,13 +51,15 @@ class phpbb_error_collector
{
$text .= "<br />\n";
}
+
list($errno, $msg_text, $errfile, $errline) = $error;
- $text .= "Errno $errno: $msg_text";
- if (defined('DEBUG_EXTRA') || defined('IN_INSTALL'))
- {
- $text .= " at $errfile line $errline";
- }
+
+ // Prevent leakage of local path to phpBB install
+ $errfile = str_replace(array($phpbb_root_path, '\\'), array('', '/'), $errfile);
+
+ $text .= "Errno $errno: $msg_text at $errfile line $errline";
}
+
return $text;
}
}
diff --git a/tests/error_collector_test.php b/tests/error_collector_test.php
new file mode 100644
index 0000000000..e1ac32f5ac
--- /dev/null
+++ b/tests/error_collector_test.php
@@ -0,0 +1,35 @@
+<?php
+/**
+*
+* @package testing
+* @copyright (c) 2011 phpBB Group
+* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+*
+*/
+
+require_once dirname(__FILE__) . '/../phpBB/includes/functions.php';
+require_once dirname(__FILE__) . '/../phpBB/includes/error_collector.php';
+
+class phpbb_error_collector_test extends phpbb_test_case
+{
+ public function test_collection()
+ {
+ $collector = new phpbb_error_collector;
+ $collector->install();
+
+ // Cause a warning
+ 1/0; $line = __LINE__;
+
+ $collector->uninstall();
+
+ list($errno, $msg_text, $errfile, $errline) = $collector->errors[0];
+ $error_contents = $collector->format_errors();
+
+ $this->assertEquals($errno, 2);
+
+ // Unfortunately $error_contents will contain the full path here,
+ // because the tests directory is outside of phpbb root path.
+ $this->assertStringStartsWith('Errno 2: Division by zero at ', $error_contents);
+ $this->assertStringEndsWith(" line $line", $error_contents);
+ }
+}