From 73f222d722460bebb98a1d2f11f891eefe4defde Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Thu, 24 Jan 2019 13:06:36 +0300 Subject: [PATCH] Fixed bug #77494 (Disabling class causes segfault on member access) --- Zend/tests/bug77494.phpt | 16 ++++++++++++++++ Zend/zend_API.c | 11 +++++++++++ 2 files changed, 27 insertions(+) create mode 100644 Zend/tests/bug77494.phpt diff --git a/Zend/tests/bug77494.phpt b/Zend/tests/bug77494.phpt new file mode 100644 index 000000000000..1793f6b219d5 --- /dev/null +++ b/Zend/tests/bug77494.phpt @@ -0,0 +1,16 @@ +--TEST-- +Bug #77494 (Disabling class causes segfault on member access) +--SKIPIF-- + +--INI-- +disable_classes=CURLFile +--FILE-- +name); +?> +--EXPECTF-- +Warning: CURLFile() has been disabled for security reasons in %sbug77494.php on line 2 + +Notice: Undefined property: CURLFile::$name in %sbug77494.php on line 3 +NULL diff --git a/Zend/zend_API.c b/Zend/zend_API.c index 600520552c52..d4b1502734f1 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -2855,5 +2855,15 @@ static zend_object *display_disabled_class(zend_class_entry *class_type) /* {{{ zend_object *intern; + int i; retval = zend_objects_new(&intern, class_type TSRMLS_CC); + + /* Initialize default properties */ + if (EXPECTED(class_type->default_properties_count != 0)) { + intern->properties_table = emalloc(sizeof(zval*) * class_type->default_properties_count); + for (i = 0; i < class_type->default_properties_count; i++) { + intern->properties_table[i] = NULL; + } + } + zend_error(E_WARNING, "%s() has been disabled for security reasons", class_type->name); return retval; }