Przeglądaj źródła

ZF-7888
fixed handling of 0 and '0' in LDAP entry attributes when updating and inserting.

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@18249 44c647ce-9c0f-0410-b52a-842ac1e357ba

sgehrig 16 lat temu
rodzic
commit
e4e372ffa2
2 zmienionych plików z 47 dodań i 4 usunięć
  1. 18 4
      library/Zend/Ldap.php
  2. 29 0
      tests/Zend/Ldap/CrudTest.php

+ 18 - 4
library/Zend/Ldap.php

@@ -1056,16 +1056,30 @@ class Zend_Ldap
             if (is_array($value)) {
                 foreach ($value as $i => $v) {
                     if (is_null($v)) unset($value[$i]);
-                    else if (empty($v)) unset($value[$i]);
                     else if (!is_scalar($v)) {
                         throw new InvalidArgumentException('Only scalar values allowed in LDAP data');
+                    } else {
+                        $v = (string)$v;
+                        if (strlen($v) == 0) {
+                            unset($value[$i]);
+                        } else {
+                            $value[$i] = $v;
+                        }
                     }
                 }
                 $entry[$key] = array_values($value);
             } else {
-               if (is_null($value)) $entry[$key] = array();
-               else if (empty($value)) $entry[$key] = array();
-               else $entry[$key] = array($value);
+                if (is_null($value)) $entry[$key] = array();
+                else if (!is_scalar($value)) {
+                    throw new InvalidArgumentException('Only scalar values allowed in LDAP data');
+                } else {
+                    $value = (string)$value;
+                    if (strlen($value) == 0) {
+                        $entry[$key] = array();
+                    } else {
+                        $entry[$key] = array($value);
+                    }
+                }
             }
         }
         $entry = array_change_key_case($entry, CASE_LOWER);

+ 29 - 0
tests/Zend/Ldap/CrudTest.php

@@ -216,6 +216,35 @@ class Zend_Ldap_CrudTest extends Zend_Ldap_OnlineTestCase
     }
 
     /**
+     * @group ZF-7888
+     */
+    public function testZeroValueMakesItThroughSanitationProcess()
+    {
+        $data = array(
+            'string'       => '0',
+            'integer'      => 0,
+            'stringArray'  => array('0'),
+            'integerArray' => array(0),
+            'null'         => null,
+            'empty'        => '',
+            'nullArray'    => array(null),
+            'emptyArray'   => array(''),
+        );
+        Zend_Ldap::prepareLdapEntryArray($data);
+        $expected=array(
+            'string'       => array('0'),
+            'integer'      => array('0'),
+            'stringarray'  => array('0'),
+            'integerarray' => array('0'),
+            'null'         => array(),
+            'empty'        => array(),
+            'nullarray'    => array(),
+            'emptyarray'   => array()
+        );
+        $this->assertEquals($expected, $data);
+    }
+
+    /**
      * @expectedException InvalidArgumentException
      */
     public function testPrepareLdapEntryArrayArrayData()