diff --git a/NEWS b/NEWS index 5f1a7339db4..ca3bcc7f0e9 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,9 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? ????, PHP 7.3.3 +-Core: + . Fixed bug #77494 (Disabling class causes segfault on member access). + (Dmitry) - Opcache: . Fixed bug #77287 (Opcache literal compaction is incompatible with EXT diff --git a/Zend/tests/bug77494.phpt b/Zend/tests/bug77494.phpt new file mode 100644 index 00000000000..1793f6b219d --- /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 d774d427660..e0bb034adc9 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -2861,6 +2861,17 @@ static zend_object *display_disabled_class(zend_class_entry *class_type) /* {{{ zend_object *intern; intern = zend_objects_new(class_type); + + /* Initialize default properties */ + if (EXPECTED(class_type->default_properties_count != 0)) { + zval *p = intern->properties_table; + zval *end = p + class_type->default_properties_count; + do { + ZVAL_UNDEF(p); + p++; + } while (p != end); + } + zend_error(E_WARNING, "%s() has been disabled for security reasons", ZSTR_VAL(class_type->name)); return intern; }