From: Ilia Alshanetsky Date: Mon, 31 Jul 2006 20:19:18 +0000 (+0000) Subject: MFB: Fixed bug #37445 (Fixed crash in pdo_mysql resulting from premature X-Git-Tag: RELEASE_1_0_0RC1~2155 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0af6ef771e31993ca1d8c9828e0995a037997351;p=php MFB: Fixed bug #37445 (Fixed crash in pdo_mysql resulting from premature object destruction). --- diff --git a/ext/pdo/pdo_dbh.c b/ext/pdo/pdo_dbh.c index bb5a65353f..a76dfc49e6 100755 --- a/ext/pdo/pdo_dbh.c +++ b/ext/pdo/pdo_dbh.c @@ -575,6 +575,7 @@ static PHP_METHOD(PDO, prepare) stmt->dbh = dbh; /* give it a reference to me */ zend_objects_store_add_ref(getThis() TSRMLS_CC); + php_pdo_dbh_addref(dbh TSRMLS_CC); stmt->database_object_handle = *getThis(); /* we haven't created a lazy object yet */ ZVAL_NULL(&stmt->lazy_object_ref); @@ -1013,6 +1014,7 @@ static PHP_METHOD(PDO, query) stmt->dbh = dbh; /* give it a reference to me */ zend_objects_store_add_ref(getThis() TSRMLS_CC); + php_pdo_dbh_addref(dbh TSRMLS_CC); stmt->database_object_handle = *getThis(); /* we haven't created a lazy object yet */ ZVAL_NULL(&stmt->lazy_object_ref); diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c index edd48e4b27..46d02b108e 100755 --- a/ext/pdo/pdo_stmt.c +++ b/ext/pdo/pdo_stmt.c @@ -2154,6 +2154,7 @@ static void free_statement(pdo_stmt_t *stmt TSRMLS_DC) do_fetch_opt_finish(stmt, 1 TSRMLS_CC); zend_objects_store_del_ref(&stmt->database_object_handle TSRMLS_CC); + php_pdo_dbh_delref(stmt->dbh TSRMLS_CC); efree(stmt); } diff --git a/ext/pdo_mysql/tests/bug_37445.phpt b/ext/pdo_mysql/tests/bug_37445.phpt new file mode 100644 index 0000000000..c4d760083d --- /dev/null +++ b/ext/pdo_mysql/tests/bug_37445.phpt @@ -0,0 +1,21 @@ +--TEST-- +PDO MySQL Bug #37445 (Premature stmt object destruction) +--SKIPIF-- + +--FILE-- +setAttribute(PDO :: ATTR_EMULATE_PREPARES, true); +$stmt = $db->prepare("SELECT 1"); +$stmt->bindParam(':a', 'b'); + +--EXPECTF-- +Fatal error: Cannot pass parameter 2 by reference in %s/bug_37445.php on line %d \ No newline at end of file