Re: [PHP-CVS] com php-src: Fixed bug #63176 (Segmentation fault when instantiate 2 persistent PDO to the same db server): NEWS ext/pdo/pdo_dbh.c ext/pdo_mysql/tests/bug63176.phpt

2013-06-16 Thread Kalle Sommer Nielsen
Hi Laruence

2013/6/16 Xinchen Hui :
> +   if ($h) {
> +   $this->db = new PDO2(PDO_MYSQL_TEST_DSN, 
> PDO_MYSQL_TEST_USER, PDO_MYSQL_TEST_PASS, array(PDO::ATTR_PERSISTENT => 
> true));
> +   } else {
> +   $this->db = new PDO2(PDO_MYSQL_TEST_DSN, 
> PDO_MYSQL_TEST_USER, PDO_MYSQL_TEST_PASS, array(PDO::ATTR_PERSISTENT => 
> true));
> +   }

Shouldn't this be PDO3, in the else, or did I miss something?

-- 
regards,

Kalle Sommer Nielsen
ka...@php.net

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



[PHP-CVS] com php-src: Fixed bug #63176 (Segmentation fault when instantiate 2 persistent PDO to the same db server): NEWS ext/pdo/pdo_dbh.c ext/pdo_mysql/tests/bug63176.phpt

2013-06-16 Thread Xinchen Hui
Commit:49e57a31659a82443b9413127f8d58a72f09ed5b
Author:Xinchen Hui  Sun, 16 Jun 2013 22:55:59 
+0800
Parents:   7457867ba8c46e276d2bcb6e47766a9f5abb0c79
Branches:  PHP-5.4 PHP-5.5 master

Link:   
http://git.php.net/?p=php-src.git;a=commitdiff;h=49e57a31659a82443b9413127f8d58a72f09ed5b

Log:
Fixed bug #63176 (Segmentation fault when instantiate 2 persistent PDO to the 
same db server)

Bugs:
https://bugs.php.net/63176

Changed paths:
  M  NEWS
  M  ext/pdo/pdo_dbh.c
  A  ext/pdo_mysql/tests/bug63176.phpt


Diff:
diff --git a/NEWS b/NEWS
index d9634ff..f8d3d78 100644
--- a/NEWS
+++ b/NEWS
@@ -15,6 +15,10 @@ PHP  
  NEWS
 - FPM:
   . Fixed Bug #64915 (error_log ignored when daemonize=0). (Remi)
 
+- PDO:
+  . Fixed bug #63176 (Segmentation fault when instantiate 2 persistent PDO to 
+the same db server). (Laruence)
+
 - PDO_DBlib:
   . Fixed bug #63638 (Cannot connect to SQL Server 2008 with PDO dblib). 
 (Stanley Sufficool)
diff --git a/ext/pdo/pdo_dbh.c b/ext/pdo/pdo_dbh.c
index e6265f5..25db684 100644
--- a/ext/pdo/pdo_dbh.c
+++ b/ext/pdo/pdo_dbh.c
@@ -338,6 +338,9 @@ static PHP_METHOD(PDO, dbh_constructor)
if (pdbh->std.properties) {
zend_hash_destroy(dbh->std.properties); 
efree(dbh->std.properties);
+   if (dbh->std.properties_table) {
+   efree(dbh->std.properties_table);
+   }
} else {
pdbh->std.ce = dbh->std.ce;
pdbh->def_stmt_ce = dbh->def_stmt_ce;
@@ -1575,6 +1578,7 @@ static void pdo_dbh_free_storage(pdo_dbh_t *dbh TSRMLS_DC)
}
zend_object_std_dtor(&dbh->std TSRMLS_CC);
dbh->std.properties = NULL;
+   dbh->std.properties_table = NULL;
dbh_free(dbh TSRMLS_CC);
 }
 
diff --git a/ext/pdo_mysql/tests/bug63176.phpt 
b/ext/pdo_mysql/tests/bug63176.phpt
new file mode 100644
index 000..392a90b
--- /dev/null
+++ b/ext/pdo_mysql/tests/bug63176.phpt
@@ -0,0 +1,54 @@
+--TEST--
+Bug #63176 (Segmentation fault when instantiate 2 persistent PDO to the same 
db server)
+--SKIPIF--
+
+--FILE--
+db = new PDO2(PDO_MYSQL_TEST_DSN, 
PDO_MYSQL_TEST_USER, PDO_MYSQL_TEST_PASS, array(PDO::ATTR_PERSISTENT => true));
+   } else {
+   $this->db = new PDO2(PDO_MYSQL_TEST_DSN, 
PDO_MYSQL_TEST_USER, PDO_MYSQL_TEST_PASS, array(PDO::ATTR_PERSISTENT => true));
+   }
+   $this->db->query('SELECT 1')->fetchAll();
+   }
+}
+
+$a = new ModelA(true);
+$b = new ModelA(false);
+
+var_dump($a);
+var_dump($b);
+--EXPECTF--
+bool(true)
+bool(false)
+object(ModelA)#%d (1) {
+  ["db"]=>
+  object(PDO2)#%d (1) {
+["transLevel":protected]=>
+NULL
+  }
+}
+object(ModelA)#%d (1) {
+  ["db"]=>
+  object(PDO2)#%d (1) {
+["transLevel":protected]=>
+NULL
+  }
+}


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