iliaa           Mon Jul 31 20:19:18 2006 UTC

  Modified files:              
    /php-src/ext/pdo_mysql/tests        bug_37445.phpt 
    /php-src/ext/pdo    pdo_dbh.c pdo_stmt.c 
  Log:
  MFB: Fixed bug #37445 (Fixed crash in pdo_mysql resulting from premature
  object destruction).  
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_mysql/tests/bug_37445.phpt?r1=1.1&r2=1.2&diff_format=u
Index: php-src/ext/pdo_mysql/tests/bug_37445.phpt
diff -u /dev/null php-src/ext/pdo_mysql/tests/bug_37445.phpt:1.2
--- /dev/null   Mon Jul 31 20:19:18 2006
+++ php-src/ext/pdo_mysql/tests/bug_37445.phpt  Mon Jul 31 20:19:18 2006
@@ -0,0 +1,21 @@
+--TEST--
+PDO MySQL Bug #37445 (Premature stmt object destruction) 
+--SKIPIF--
+<?php
+if (!extension_loaded('pdo') || !extension_loaded('pdo_mysql')) die('skip not 
loaded');
+require dirname(__FILE__) . '/config.inc';
+require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
+$db = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt');
+PDOTest::skip();
+?>
+--FILE--
+<?php
+require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
+$db = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt');
+
+$db->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
http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_dbh.c?r1=1.131&r2=1.132&diff_format=u
Index: php-src/ext/pdo/pdo_dbh.c
diff -u php-src/ext/pdo/pdo_dbh.c:1.131 php-src/ext/pdo/pdo_dbh.c:1.132
--- php-src/ext/pdo/pdo_dbh.c:1.131     Wed Jun  7 03:33:39 2006
+++ php-src/ext/pdo/pdo_dbh.c   Mon Jul 31 20:19:18 2006
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pdo_dbh.c,v 1.131 2006/06/07 03:33:39 iliaa Exp $ */
+/* $Id: pdo_dbh.c,v 1.132 2006/07/31 20:19:18 iliaa Exp $ */
 
 /* The PDO Database Handle Class */
 
@@ -575,6 +575,7 @@
        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 @@
        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);
http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.161&r2=1.162&diff_format=u
Index: php-src/ext/pdo/pdo_stmt.c
diff -u php-src/ext/pdo/pdo_stmt.c:1.161 php-src/ext/pdo/pdo_stmt.c:1.162
--- php-src/ext/pdo/pdo_stmt.c:1.161    Sun Jul 30 11:20:40 2006
+++ php-src/ext/pdo/pdo_stmt.c  Mon Jul 31 20:19:18 2006
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pdo_stmt.c,v 1.161 2006/07/30 11:20:40 tony2001 Exp $ */
+/* $Id: pdo_stmt.c,v 1.162 2006/07/31 20:19:18 iliaa Exp $ */
 
 /* The PDO Statement Handle Class */
 
@@ -2154,6 +2154,7 @@
        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);
 }
 

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to