mirror of
https://github.com/processwire/processwire.git
synced 2025-08-12 17:54:44 +02:00
Update WireShutdown to support sanitization of debug backtraces
This commit is contained in:
@@ -90,6 +90,25 @@ class WireShutdown extends Wire {
|
|||||||
*/
|
*/
|
||||||
protected $error = array();
|
protected $error = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Methods that should have their arguments suppressed from PHP backtraces
|
||||||
|
*
|
||||||
|
* - Each method must include a `->`.
|
||||||
|
* - Methods should not include parenthesis.
|
||||||
|
* - If for specific class, include the class name before the `->`.
|
||||||
|
*
|
||||||
|
* @var string[]
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected $banBacktraceMethods = array(
|
||||||
|
'->___login', // Session or ProcessLogin
|
||||||
|
'->___start', // i.e. Tfa
|
||||||
|
'->___setPass', // Password.php
|
||||||
|
'Session->___authenticate',
|
||||||
|
'Password->matches',
|
||||||
|
'Password->hash',
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default HTML to use for error message
|
* Default HTML to use for error message
|
||||||
*
|
*
|
||||||
@@ -188,6 +207,7 @@ class WireShutdown extends Wire {
|
|||||||
protected function getErrorMessage(array $error) {
|
protected function getErrorMessage(array $error) {
|
||||||
|
|
||||||
$type = $error['type'];
|
$type = $error['type'];
|
||||||
|
$config = $this->config;
|
||||||
|
|
||||||
if(isset($this->types[$type])) {
|
if(isset($this->types[$type])) {
|
||||||
$errorType = $this->types[$type];
|
$errorType = $this->types[$type];
|
||||||
@@ -203,7 +223,25 @@ class WireShutdown extends Wire {
|
|||||||
$detail = '';
|
$detail = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
return "$errorType: \t$message $detail ";
|
$message = "$errorType: \t$message $detail ";
|
||||||
|
|
||||||
|
if(strpos($message, '#1') !== false && stripos($message, '):')) {
|
||||||
|
// backtrace likely present in $message
|
||||||
|
// methods that should have their arguments excluded from backtrace
|
||||||
|
foreach($this->banBacktraceMethods as $name) {
|
||||||
|
if(strpos($message, "$name(") === false) continue;
|
||||||
|
if(!preg_match_all('!' . $name . '\([^\n]+\)!', $message, $matches)) continue;
|
||||||
|
foreach($matches[0] as $match) {
|
||||||
|
$message = str_replace($match, '->' . $name . '(...)', $message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(strlen((string) $config->dbPass) > 4) {
|
||||||
|
$message = str_replace((string) $config->dbPass, '[...]', $message);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $message;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user