summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2019-01-24 13:07:31 +0300
committerDmitry Stogov <dmitry@zend.com>2019-01-24 13:07:31 +0300
commitaa9a8dbda3ffc397aa177173650eaeaada778eda (patch)
tree3d2a9f82d91436b9cb36fe8a29757bbe7516b17a
parente0f97ae7ec89bdfef163e4b76b895ffab84dedba (diff)
parent73f222d722460bebb98a1d2f11f891eefe4defde (diff)
downloadphp-git-aa9a8dbda3ffc397aa177173650eaeaada778eda.tar.gz
Merge branch 'PHP-7.2' into PHP-7.3
* PHP-7.2: Fixed bug #77494 (Disabling class causes segfault on member access)
-rw-r--r--NEWS3
-rw-r--r--Zend/tests/bug77494.phpt16
-rw-r--r--Zend/zend_API.c11
3 files changed, 30 insertions, 0 deletions
diff --git a/NEWS b/NEWS
index 5f1a7339db..ca3bcc7f0e 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 0000000000..1793f6b219
--- /dev/null
+++ b/Zend/tests/bug77494.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Bug #77494 (Disabling class causes segfault on member access)
+--SKIPIF--
+<?php if (!extension_loaded("curl")) exit("skip curl extension not loaded"); ?>
+--INI--
+disable_classes=CURLFile
+--FILE--
+<?php
+$a = new CURLFile();
+var_dump($a->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 d774d42766..e0bb034adc 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;
}