Browse Source

Fix re-numbering of values in exportVar()

Using array_merge resulted in values being re-indexed,
change how arrays are combined to preserve keys.

Fixes #2506
mark_story 14 years ago
parent
commit
29514b08fb
2 changed files with 29 additions and 4 deletions
  1. 15 2
      lib/Cake/Test/Case/Utility/DebuggerTest.php
  2. 14 2
      lib/Cake/Utility/Debugger.php

+ 15 - 2
lib/Cake/Test/Case/Utility/DebuggerTest.php

@@ -329,8 +329,21 @@ object(View) {
 	float => (float) 1.333
 }
 TEXT;
-		// $result = str_replace(array("\r\n", "\n"), "", $result);
-		// $expected =  str_replace(array("\r\n", "\n"), "", $expected);
+		$result = str_replace(array("\r\n", "\n"), "", $result);
+		$expected =  str_replace(array("\r\n", "\n"), "", $expected);
+		$this->assertEquals($expected, $result);
+
+		$data = array(
+			1 => 'Index one',
+			5 => 'Index five'
+		);
+		$result = Debugger::exportVar($data);
+		$expected = <<<TEXT
+array(
+	(int) 1 => 'Index one',
+	(int) 5 => 'Index five'
+)
+TEXT;
 		$this->assertEquals($expected, $result);
 	}
 

+ 14 - 2
lib/Cake/Utility/Debugger.php

@@ -496,13 +496,23 @@ class Debugger {
 /**
  * Export an array type object.  Filters out keys used in datasource configuration.
  *
+ * The following keys are replaced with ***'s
+ *
+ * - password
+ * - login
+ * - host
+ * - database
+ * - port
+ * - prefix
+ * - schema
+ *
  * @param array $var The array to export.
  * @param integer $depth The current depth, used for recursion tracking.
  * @param integer $indent The current indentation level.
  * @return string Exported array.
  */
 	protected static function _array(array $var, $depth, $indent) {
-		$var = array_merge($var,  array_intersect_key(array(
+		$secrets = array(
 			'password' => '*****',
 			'login'  => '*****',
 			'host' => '*****',
@@ -510,7 +520,9 @@ class Debugger {
 			'port' => '*****',
 			'prefix' => '*****',
 			'schema' => '*****'
-		), $var));
+		);
+		$replace = array_intersect_key($secrets, $var);
+		$var = $replace + $var;
 
 		$out = "array(";
 		$n = $break = $end = null;