Fix CRM-13113. Do not try to foreach() an empty array.
authorChris Burgess <chris@giantrobot.co.nz>
Mon, 1 Sep 2014 01:39:15 +0000 (13:39 +1200)
committerChris Burgess <chris@giantrobot.co.nz>
Mon, 1 Sep 2014 01:39:15 +0000 (13:39 +1200)
CRM/Core/Error.php

index 8cddeac76de4fd4368373875500b3ab30e730bdc..e3cb5a4d7bb711185d96135fb9e1ccdb87afc69b 100644 (file)
@@ -697,40 +697,42 @@ class CRM_Core_Error extends PEAR_ErrorStack {
       $fnName = CRM_Utils_Array::value('function', $trace);
       $className = isset($trace['class']) ? ($trace['class'] . $trace['type']) : '';
 
-      // do now show args for a few password related functions
+      // Do not show args for a few password related functions
       $skipArgs = ($className == 'DB::' && $fnName == 'connect') ? TRUE : FALSE;
 
-      foreach ($trace['args'] as $arg) {
-        if (! $showArgs || $skipArgs) {
-          $args[] = '(' . gettype($arg) . ')';
-          continue;
-        }
-        switch ($type = gettype($arg)) {
-          case 'boolean':
-            $args[] = $arg ? 'TRUE' : 'FALSE';
-            break;
-          case 'integer':
-          case 'double':
-            $args[] = $arg;
-            break;
-          case 'string':
-            $args[] = '"' . CRM_Utils_String::ellipsify(addcslashes((string) $arg, "\r\n\t\""), $maxArgLen). '"';
-            break;
-          case 'array':
-            $args[] = '(Array:'.count($arg).')';
-            break;
-          case 'object':
-            $args[] = 'Object(' . get_class($arg) . ')';
-            break;
-          case 'resource':
-            $args[] = 'Resource';
-            break;
-          case 'NULL':
-            $args[] = 'NULL';
-            break;
-          default:
-            $args[] = "($type)";
-            break;
+      if (!empty($trace['args'])) {
+        foreach ($trace['args'] as $arg) {
+          if (! $showArgs || $skipArgs) {
+            $args[] = '(' . gettype($arg) . ')';
+            continue;
+          }
+          switch ($type = gettype($arg)) {
+            case 'boolean':
+              $args[] = $arg ? 'TRUE' : 'FALSE';
+              break;
+            case 'integer':
+            case 'double':
+              $args[] = $arg;
+              break;
+            case 'string':
+              $args[] = '"' . CRM_Utils_String::ellipsify(addcslashes((string) $arg, "\r\n\t\""), $maxArgLen). '"';
+              break;
+            case 'array':
+              $args[] = '(Array:'.count($arg).')';
+              break;
+            case 'object':
+              $args[] = 'Object(' . get_class($arg) . ')';
+              break;
+            case 'resource':
+              $args[] = 'Resource';
+              break;
+            case 'NULL':
+              $args[] = 'NULL';
+              break;
+            default:
+              $args[] = "($type)";
+              break;
+          }
         }
       }