tony2001 Tue Sep 12 11:42:25 2006 UTC
Modified files:
/php-src/ext/oci8 oci8_statement.c
/php-src/ext/oci8/tests debug.phpt
Log:
fix leak when binding a variable to the same placeholder several times
http://cvs.php.net/viewvc.cgi/php-src/ext/oci8/oci8_statement.c?r1=1.28&r2=1.29&diff_format=u
Index: php-src/ext/oci8/oci8_statement.c
diff -u php-src/ext/oci8/oci8_statement.c:1.28
php-src/ext/oci8/oci8_statement.c:1.29
--- php-src/ext/oci8/oci8_statement.c:1.28 Thu Aug 31 16:14:43 2006
+++ php-src/ext/oci8/oci8_statement.c Tue Sep 12 11:42:25 2006
@@ -25,7 +25,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: oci8_statement.c,v 1.28 2006/08/31 16:14:43 tony2001 Exp $ */
+/* $Id: oci8_statement.c,v 1.29 2006/09/12 11:42:25 tony2001 Exp $ */
#ifdef HAVE_CONFIG_H
@@ -800,7 +800,7 @@
/* dvoid *php_oci_collection = NULL; */
OCIStmt *oci_stmt = NULL;
dvoid *bind_data = NULL;
- php_oci_bind bind, *bindp;
+ php_oci_bind bind, *old_bind, *bindp;
int mode = OCI_DATA_AT_EXEC;
sb4 value_sz = -1;
@@ -900,7 +900,14 @@
}
memset((void*)&bind,0,sizeof(php_oci_bind));
- zend_hash_update(statement->binds, name, name_len + 1, &bind,
sizeof(php_oci_bind), (void **)&bindp);
+ if (zend_hash_find(statement->binds, name, name_len + 1, (void
**)&old_bind) == SUCCESS) {
+ bindp = old_bind;
+ if (bindp->zval) {
+ zval_ptr_dtor(&bindp->zval);
+ }
+ } else {
+ zend_hash_update(statement->binds, name, name_len + 1, &bind,
sizeof(php_oci_bind), (void **)&bindp);
+ }
bindp->descriptor = oci_desc;
bindp->statement = oci_stmt;
http://cvs.php.net/viewvc.cgi/php-src/ext/oci8/tests/debug.phpt?r1=1.4&r2=1.5&diff_format=u
Index: php-src/ext/oci8/tests/debug.phpt
diff -u php-src/ext/oci8/tests/debug.phpt:1.4
php-src/ext/oci8/tests/debug.phpt:1.5
--- php-src/ext/oci8/tests/debug.phpt:1.4 Tue Mar 28 09:13:35 2006
+++ php-src/ext/oci8/tests/debug.phpt Tue Sep 12 11:42:25 2006
@@ -28,6 +28,4 @@
OCI8 DEBUG: OCIHandleFree at (%s:%d)
OCI8 DEBUG: OCIHandleFree at (%s:%d)
OCI8 DEBUG: OCIHandleFree at (%s:%d)
-OCI8 DEBUG: OCIHandleFree at (%s:%d)
-OCI8 DEBUG: OCIHandleFree at (%s:%d)
OCI8 DEBUG: OCIHandleFree at (%s:%d)
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php