diff --git a/phpBB/includes/error_collector.php b/phpBB/includes/error_collector.php
index 534df27ece..040be4dd13 100644
--- a/phpBB/includes/error_collector.php
+++ b/phpBB/includes/error_collector.php
@@ -42,8 +42,6 @@ class phpbb_error_collector
function format_errors()
{
- $phpbb_root_path = phpbb_realpath(dirname(__FILE__) . '/../');
-
$text = '';
foreach ($this->errors as $error)
{
@@ -55,7 +53,7 @@ class phpbb_error_collector
list($errno, $msg_text, $errfile, $errline) = $error;
// Prevent leakage of local path to phpBB install
- $errfile = str_replace(array($phpbb_root_path, '\\'), array('', '/'), $errfile);
+ $errfile = phpbb_filter_errfile($errfile);
$text .= "Errno $errno: $msg_text at $errfile line $errline";
}
diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php
index 628f8ee123..4c1bfb4360 100644
--- a/phpBB/includes/functions.php
+++ b/phpBB/includes/functions.php
@@ -3816,9 +3816,8 @@ function msg_handler($errno, $msg_text, $errfile, $errline)
if (strpos($errfile, 'cache') === false && strpos($errfile, 'template.') === false)
{
- // remove complete path to installation, with the risk of changing backslashes meant to be there
- $errfile = str_replace(array(phpbb_realpath($phpbb_root_path), '\\'), array('', '/'), $errfile);
- $msg_text = str_replace(array(phpbb_realpath($phpbb_root_path), '\\'), array('', '/'), $msg_text);
+ $errfile = phpbb_filter_errfile($errfile);
+ $msg_text = phpbb_filter_errfile($msg_text);
$error_name = ($errno === E_WARNING) ? 'PHP Warning' : 'PHP Notice';
echo '[phpBB Debug] ' . $error_name . ': in file ' . $errfile . ' on line ' . $errline . ': ' . $msg_text . '
' . "\n";
@@ -3996,6 +3995,27 @@ function msg_handler($errno, $msg_text, $errfile, $errline)
return false;
}
+/**
+* Removes absolute path to phpBB root directory from error messages
+* and converts backslashes to forward slashes.
+*
+* @param string $errfile Absolute file path
+* (e.g. /var/www/phpbb3/phpBB/includes/functions.php)
+* @return string Relative file path
+* (e.g. /includes/functions.php)
+*/
+function phpbb_filter_errfile($errfile)
+{
+ static $root_path;
+
+ if (empty($root_path))
+ {
+ $root_path = phpbb_realpath(dirname(__FILE__) . '/../');
+ }
+
+ return str_replace(array($root_path, '\\'), array('', '/'), $errfile);
+}
+
/**
* Queries the session table to get information about online guests
* @param int $item_id Limits the search to the item with this id