diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2019-12-18 10:24:02 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-12-18 10:24:02 +0100 |
commit | b965f158aca1babc4d68f25f10129e237af9992f (patch) | |
tree | 776becc4e559d884d861d9076d7f4aa821c19ab8 | |
parent | ee89e733121c0da360cd6329d7411083cb743429 (diff) | |
download | php-git-b965f158aca1babc4d68f25f10129e237af9992f.tar.gz |
Fix use-after-free when trying to write to closure property
-rw-r--r-- | Zend/tests/closure_write_prop.phpt | 22 | ||||
-rw-r--r-- | Zend/zend_closures.c | 2 |
2 files changed, 23 insertions, 1 deletions
diff --git a/Zend/tests/closure_write_prop.phpt b/Zend/tests/closure_write_prop.phpt new file mode 100644 index 0000000000..38bebf4e1b --- /dev/null +++ b/Zend/tests/closure_write_prop.phpt @@ -0,0 +1,22 @@ +--TEST-- +Cannot write to closure properties +--FILE-- +<?php + +class A { + function getFn() { + return function() { + }; + } +} + +$a = new A; +try { + $c = $a->getFn()->b = new stdClass; +} catch (Error $e) { + echo $e->getMessage(), "\n"; +} + +?> +--EXPECT-- +Closure object cannot have properties diff --git a/Zend/zend_closures.c b/Zend/zend_closures.c index 697fd69fd6..92f1398d84 100644 --- a/Zend/zend_closures.c +++ b/Zend/zend_closures.c @@ -435,7 +435,7 @@ static ZEND_COLD zval *zend_closure_read_property(zval *object, zval *member, in static ZEND_COLD zval *zend_closure_write_property(zval *object, zval *member, zval *value, void **cache_slot) /* {{{ */ { ZEND_CLOSURE_PROPERTY_ERROR(); - return value; + return &EG(error_zval); } /* }}} */ |