diff options
author | Joe Watkins <krakjoe@php.net> | 2019-04-06 00:55:31 +0200 |
---|---|---|
committer | Joe Watkins <krakjoe@php.net> | 2019-04-06 00:55:46 +0200 |
commit | 0d5be6ce91701bcb47efe7a520189e035e38cd08 (patch) | |
tree | 9349dec79bfe1df2cd5b34f3a86c8ec62436eacc | |
parent | 31fe6cfe763d9b5aae90ace18d9ece34bb0dad1b (diff) | |
parent | 9ec1525eb5840f8a38470df65f3a36b43eaf28f0 (diff) | |
download | php-git-0d5be6ce91701bcb47efe7a520189e035e38cd08.tar.gz |
Merge branch 'PHP-7.2' into PHP-7.3
* PHP-7.2:
Fix bug #77849 Disable cloning of PDO handle/connection objects to avoid segfault
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | ext/pdo/pdo_dbh.c | 1 | ||||
-rw-r--r-- | ext/pdo/tests/bug_77849.phpt | 23 |
3 files changed, 28 insertions, 0 deletions
@@ -21,6 +21,10 @@ PHP NEWS - PCRE: . Fixed bug #77827 (preg_match does not ignore \r in regex flags). (requinix, cmb) + +- PDO: + . Fixed bug #77849 (Disable cloning of PDO handle/connection objects). + (camporter) - phpdbg: . Fixed bug #76801 (too many open files). (alekitto) diff --git a/ext/pdo/pdo_dbh.c b/ext/pdo/pdo_dbh.c index 2c92c50edf..36bb2a17ac 100644 --- a/ext/pdo/pdo_dbh.c +++ b/ext/pdo/pdo_dbh.c @@ -1390,6 +1390,7 @@ void pdo_dbh_init(void) pdo_dbh_object_handlers.offset = XtOffsetOf(pdo_dbh_object_t, std); pdo_dbh_object_handlers.dtor_obj = zend_objects_destroy_object; pdo_dbh_object_handlers.free_obj = pdo_dbh_free_storage; + pdo_dbh_object_handlers.clone_obj = NULL; pdo_dbh_object_handlers.get_method = dbh_method_get; pdo_dbh_object_handlers.compare_objects = dbh_compare; pdo_dbh_object_handlers.get_gc = dbh_get_gc; diff --git a/ext/pdo/tests/bug_77849.phpt b/ext/pdo/tests/bug_77849.phpt new file mode 100644 index 0000000000..6643f8c581 --- /dev/null +++ b/ext/pdo/tests/bug_77849.phpt @@ -0,0 +1,23 @@ +--TEST-- +PDO Common: Bug #77849 (Unexpected segfault attempting to use cloned PDO object) +--SKIPIF-- +<?php +if (!extension_loaded('pdo')) die('skip'); +$dir = getenv('REDIR_TEST_DIR'); +if (false == $dir) die('skip no driver'); +require_once $dir . 'pdo_test.inc'; +PDOTest::skip(); +?> +--FILE-- +<?php +if (getenv('REDIR_TEST_DIR') === false) putenv('REDIR_TEST_DIR='.dirname(__FILE__) . '/../../pdo/tests/'); +require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc'; + +$db = PDOTest::factory(); +$db2 = clone $db; +?> +--EXPECTF-- +Fatal error: Uncaught Error: Trying to clone an uncloneable object of class PDO in %s +Stack trace: +#0 {main} + thrown in %s on line %d |