]> granicus.if.org Git - php/commitdiff
Bug #45458 (OCI8: Numeric keys for associative arrays are not handled properly)
authorChristopher Jones <sixd@php.net>
Thu, 28 Aug 2008 06:17:53 +0000 (06:17 +0000)
committerChristopher Jones <sixd@php.net>
Thu, 28 Aug 2008 06:17:53 +0000 (06:17 +0000)
ext/oci8/oci8_interface.c
ext/oci8/tests/bug45458.phpt [new file with mode: 0644]

index 4516601e90ed97b28fd9aa3f5860bb4cef851e1c..e49a39e35ac3143fb37485d6cedb4d6318274946 100644 (file)
@@ -1439,7 +1439,7 @@ PHP_FUNCTION(oci_fetch_all)
                                if (flags & PHP_OCI_NUM) {
                                        zend_hash_next_index_insert(Z_ARRVAL_P(row), &element, sizeof(zval*), NULL);
                                } else { /* default to ASSOC */
-                                       zend_u_hash_update(Z_ARRVAL_P(row), (UG(unicode) ? IS_UNICODE : IS_STRING), columns[ i ]->name, columns[ i ]->name_len+1, &element, sizeof(zval*), NULL);
+                                       zend_u_symtable_update(Z_ARRVAL_P(row), (UG(unicode) ? IS_UNICODE : IS_STRING), columns[ i ]->name, columns[ i ]->name_len+1, &element, sizeof(zval*), NULL);
                                }
                        }
 
@@ -1471,7 +1471,7 @@ PHP_FUNCTION(oci_fetch_all)
                                
                                MAKE_STD_ZVAL(tmp);
                                array_init(tmp);
-                               zend_u_hash_update(Z_ARRVAL_P(array), (UG(unicode) ? IS_UNICODE : IS_STRING), columns[ i ]->name, columns[ i ]->name_len+1, (void *) &tmp, sizeof(zval*), (void **) &(outarrs[ i ]));
+                               zend_u_symtable_update(Z_ARRVAL_P(array), (UG(unicode) ? IS_UNICODE : IS_STRING), columns[ i ]->name, columns[ i ]->name_len+1, (void *) &tmp, sizeof(zval*), (void **) &(outarrs[ i ]));
                        }
                }
 
diff --git a/ext/oci8/tests/bug45458.phpt b/ext/oci8/tests/bug45458.phpt
new file mode 100644 (file)
index 0000000..f68c1c2
--- /dev/null
@@ -0,0 +1,84 @@
+--TEST--
+Bug #45458 (OCI8: Numeric keys for associative arrays are not handled properly)
+--SKIPIF--
+<?php if (!extension_loaded('oci8')) die ("skip no oci8 extension"); ?>
+--FILE--
+<?php
+
+require(dirname(__FILE__).'/connect.inc');
+
+// Run Test
+
+echo "Test 1\n";
+
+$stmt = 'select dummy "a", dummy "20" from dual';
+
+$s = oci_parse($c, $stmt);
+oci_execute($s);
+$r = oci_fetch_all($s, $data, 0, -1, OCI_FETCHSTATEMENT_BY_ROW);
+var_dump($data);
+var_dump($data[0]);
+var_dump($data[0]["a"]);
+var_dump($data[0]["20"]);
+oci_free_statement($s);
+
+echo "Test 2\n";
+
+$s = oci_parse($c, $stmt);
+oci_execute($s);
+$r = oci_fetch_all($s, $data, 0, -1, OCI_ASSOC);
+var_dump($data);
+var_dump($data["a"]);
+var_dump($data["20"]);
+var_dump($data["a"][0]);
+var_dump($data["20"][0]);
+oci_free_statement($s);
+
+oci_close($c);
+
+?>
+===DONE===
+<?php exit(0); ?>
+--EXPECT--
+Test 1
+array(1) {
+  [0]=>
+  array(2) {
+    [u"a"]=>
+    unicode(1) "X"
+    [20]=>
+    unicode(1) "X"
+  }
+}
+array(2) {
+  [u"a"]=>
+  unicode(1) "X"
+  [20]=>
+  unicode(1) "X"
+}
+unicode(1) "X"
+unicode(1) "X"
+Test 2
+array(2) {
+  [u"a"]=>
+  array(1) {
+    [0]=>
+    unicode(1) "X"
+  }
+  [20]=>
+  array(1) {
+    [0]=>
+    unicode(1) "X"
+  }
+}
+array(1) {
+  [0]=>
+  unicode(1) "X"
+}
+array(1) {
+  [0]=>
+  unicode(1) "X"
+}
+unicode(1) "X"
+unicode(1) "X"
+===DONE===