diff --git a/cake/libs/debugger.php b/cake/libs/debugger.php index 0d386d2171e..9e25fdc207c 100644 --- a/cake/libs/debugger.php +++ b/cake/libs/debugger.php @@ -499,6 +499,16 @@ function exportVar($var, $recursion = 0) { case 'object': return get_class($var) . "\n" . $_this->__object($var); case 'array': + $var = array_merge($var, array_intersect_key(array( + 'password' => '*****', + 'login' => '*****', + 'host' => '*****', + 'database' => '*****', + 'port' => '*****', + 'prefix' => '*****', + 'schema' => '*****' + ), $var)); + $out = "array("; $vars = array(); foreach ($var as $key => $val) { diff --git a/cake/tests/cases/libs/debugger.test.php b/cake/tests/cases/libs/debugger.test.php index 025083b761a..e2a22e94b54 100644 --- a/cake/tests/cases/libs/debugger.test.php +++ b/cake/tests/cases/libs/debugger.test.php @@ -333,4 +333,40 @@ function testGetInstance() { $result =& Debugger::getInstance('Debugger'); $this->assertIsA($result, 'Debugger'); } + +/** + * testNoDbCredentials + * + * If a connection error occurs, the config variable is passed through exportVar + * *** our database login credentials such that they are never visible + * + * @access public + * @return void + */ + function testNoDbCredentials() { + $config = array( + 'driver' => 'mysql', + 'persistent' => false, + 'host' => 'void.cakephp.org', + 'login' => 'cakephp-user', + 'password' => 'cakephp-password', + 'database' => 'cakephp-database', + 'prefix' => '' + ); + + $output = Debugger::exportVar($config); + + $expectedArray = array( + 'driver' => 'mysql', + 'persistent' => false, + 'host' => '*****', + 'login' => '*****', + 'password' => '*****', + 'database' => '*****', + 'prefix' => '' + ); + $expected = Debugger::exportVar($expectedArray); + + $this->assertEqual($expected, $output); + } }