diff --git a/ext/soap/soap.c b/ext/soap/soap.c index e98820c630ed..924e60deaa40 100644 --- a/ext/soap/soap.c +++ b/ext/soap/soap.c @@ -412,6 +412,7 @@ PHP_MINIT_FUNCTION(soap) memcpy(&soap_server_object_handlers, &std_object_handlers, sizeof(zend_object_handlers)); soap_server_object_handlers.offset = XtOffsetOf(soap_server_object, std); soap_server_object_handlers.free_obj = soap_server_object_free; + soap_server_object_handlers.clone_obj = NULL; /* Register SoapFault class */ soap_fault_class_entry = register_class_SoapFault(zend_ce_exception); diff --git a/ext/soap/tests/bugs/gh16237.phpt b/ext/soap/tests/bugs/gh16237.phpt new file mode 100644 index 000000000000..468f2794399e --- /dev/null +++ b/ext/soap/tests/bugs/gh16237.phpt @@ -0,0 +1,17 @@ +--TEST-- +GH-16237 (Segmentation fault when cloning SoapServer) +--EXTENSIONS-- +soap +--FILE-- +"http://testuri.org"]); +try { + clone $server; +} catch (Error $e) { + echo $e->getMessage(), "\n"; +} + +?> +--EXPECT-- +Trying to clone an uncloneable object of class SoapServer