From 9ec1525eb5840f8a38470df65f3a36b43eaf28f0 Mon Sep 17 00:00:00 2001 From: Cameron Porter Date: Fri, 5 Apr 2019 13:42:04 -0500 Subject: [PATCH] Fix bug #77849 Disable cloning of PDO handle/connection objects to avoid segfault --- NEWS | 4 ++++ ext/pdo/pdo_dbh.c | 1 + ext/pdo/tests/bug_77849.phpt | 23 +++++++++++++++++++++++ 3 files changed, 28 insertions(+) create mode 100644 ext/pdo/tests/bug_77849.phpt diff --git a/NEWS b/NEWS index 67028cd64c8..d3557783446 100644 --- a/NEWS +++ b/NEWS @@ -14,6 +14,10 @@ PHP NEWS . 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) . Fixed bug #77800 (phpdbg segfaults on listing some conditional breakpoints). diff --git a/ext/pdo/pdo_dbh.c b/ext/pdo/pdo_dbh.c index 314c845ac43..5ce220ac205 100644 --- a/ext/pdo/pdo_dbh.c +++ b/ext/pdo/pdo_dbh.c @@ -1403,6 +1403,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 00000000000..6643f8c5813 --- /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-- + +--FILE-- + +--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