diff --git a/Zend/tests/gh14456.phpt b/Zend/tests/gh14456.phpt new file mode 100644 index 00000000000..e05edb1bc41 --- /dev/null +++ b/Zend/tests/gh14456.phpt @@ -0,0 +1,20 @@ +--TEST-- +GH-14456: Attempting to initialize class with private constructor calls destructor +--FILE-- +getMessage(), PHP_EOL; +} +?> +--EXPECT-- +Error: Call to private PrivateUser::__construct() from global scope diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index 158b9372385..308be8571d8 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -1682,6 +1682,7 @@ ZEND_API zend_function *zend_std_get_constructor(zend_object *zobj) /* {{{ */ if (UNEXPECTED(constructor->op_array.fn_flags & ZEND_ACC_PRIVATE) || UNEXPECTED(!zend_check_protected(zend_get_function_root_class(constructor), scope))) { zend_bad_constructor_call(constructor, scope); + zend_object_store_ctor_failed(zobj); constructor = NULL; } }