From c20bde9779e46ad5a426fdee168c89d547977d15 Mon Sep 17 00:00:00 2001 From: Marcus Boerger Date: Sat, 3 Jan 2009 19:29:04 +0000 Subject: [PATCH] - Prevent instantiation from Reflection --- Zend/zend_closures.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/Zend/zend_closures.c b/Zend/zend_closures.c index 62d99c7e4c..e137bbd461 100644 --- a/Zend/zend_closures.c +++ b/Zend/zend_closures.c @@ -315,11 +315,24 @@ static HashTable *zend_closure_get_debug_info(zval *object, int *is_temp TSRMLS_ } /* }}} */ +/* {{{ proto Closure::__construct() + Private constructor preventing instantiation */ +ZEND_METHOD(Closure, __construct) +{ + zend_error(E_RECOVERABLE_ERROR, "Instantiation of 'Closure' is not allowed"); +} +/* }}} */ + +static const zend_function_entry closure_functions[] = { + ZEND_ME(Closure, __construct, NULL, ZEND_ACC_PRIVATE) + {NULL, NULL, NULL} +}; + void zend_register_closure_ce(TSRMLS_D) /* {{{ */ { zend_class_entry ce; - INIT_CLASS_ENTRY(ce, "Closure", NULL); + INIT_CLASS_ENTRY(ce, "Closure", closure_functions); zend_ce_closure = zend_register_internal_class(&ce TSRMLS_CC); zend_ce_closure->ce_flags |= ZEND_ACC_FINAL_CLASS; zend_ce_closure->create_object = zend_closure_new; -- 2.50.1