]> granicus.if.org Git - php/commitdiff
Bug #44113 (New collection creation can fail with OCI-22303)
authorChristopher Jones <sixd@php.net>
Fri, 15 Feb 2008 23:05:19 +0000 (23:05 +0000)
committerChristopher Jones <sixd@php.net>
Fri, 15 Feb 2008 23:05:19 +0000 (23:05 +0000)
ext/oci8/oci8_collection.c
ext/oci8/tests/bug44113.phpt [new file with mode: 0644]

index 9095c5d2c69e9aeacda6f05ef47585d0553ab344..5f56e376b1cc1f5cf5c5fb862c938aa81c8dc208 100644 (file)
@@ -44,9 +44,9 @@
 
 /* {{{ php_oci_collection_create() 
  Create and return connection handle */
-php_oci_collection * php_oci_collection_create(php_oci_connectionconnection, char *tdo, int tdo_len, char *schema, int schema_len TSRMLS_DC)
+php_oci_collection * php_oci_collection_create(php_oci_connection *connection, char *tdo, int tdo_len, char *schema, int schema_len TSRMLS_DC)
 {      
-       dvoid *dschp1;
+       dvoid *dschp1 = NULL;
        dvoid *parmp1;
        dvoid *parmp2;
        php_oci_collection *collection;
@@ -219,11 +219,17 @@ php_oci_collection * php_oci_collection_create(php_oci_connection* connection, c
                goto CLEANUP;
        }
 
+       /* free the describe handle (Bug #44113) */
+       PHP_OCI_CALL(OCIHandleFree, ((dvoid *) dschp1, OCI_HTYPE_DESCRIBE));
        PHP_OCI_REGISTER_RESOURCE(collection, le_collection);
        return collection;
        
 CLEANUP:
 
+       if (dschp1) {
+               /* free the describe handle (Bug #44113) */
+               PHP_OCI_CALL(OCIHandleFree, ((dvoid *) dschp1, OCI_HTYPE_DESCRIBE));
+       }
        php_oci_error(connection->err, connection->errcode TSRMLS_CC);
        php_oci_collection_close(collection TSRMLS_CC); 
        return NULL;
diff --git a/ext/oci8/tests/bug44113.phpt b/ext/oci8/tests/bug44113.phpt
new file mode 100644 (file)
index 0000000..646f09b
--- /dev/null
@@ -0,0 +1,53 @@
+--TEST--
+Bug #44113 (New collection creation can fail with OCI-22303)
+--SKIPIF--
+<?php if (!extension_loaded('oci8')) die ("skip no oci8 extension"); ?>
+--FILE--
+<?php
+
+require dirname(__FILE__).'/connect.inc';
+
+// Initialization
+
+$stmtarray = array(
+       "create or replace type bug44113_list_t as table of number"
+);
+
+foreach ($stmtarray as $stmt) {
+       $s = oci_parse($c, $stmt);
+       @oci_execute($s);
+}
+
+// Run Test
+// The test can take some time to complete and can exceed PHP's test
+// timout limit on slow networks.
+
+for ($x = 0; $x < 70000; $x++)
+{
+       if (!($var = oci_new_collection($c, 'BUG44113_LIST_T'))) {
+               print "Failed new collection creation on $x\n";
+               break;
+       }
+}
+
+print "Completed $x\n";
+
+// Cleanup
+
+$stmtarray = array(
+       "drop type bug44113_list_t"
+);
+
+foreach ($stmtarray as $stmt) {
+       $s = oci_parse($c, $stmt);
+       oci_execute($s);
+}
+
+oci_close($c);
+
+echo "Done\n";
+
+?>
+--EXPECT--
+Completed 70000
+Done