diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2020-09-07 19:06:53 +0200 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-09-07 19:08:04 +0200 |
commit | 174dadf6b476a11c72646294700e62fe911366cb (patch) | |
tree | 8ab4814f4c9bdecb117499da63c7301f3adeb093 | |
parent | 628db3f3b5b28190997b3cb2f711b6853c074660 (diff) | |
download | php-git-174dadf6b476a11c72646294700e62fe911366cb.tar.gz |
Don't allow dynamic properties on generators
Noticed this because we leak those properties in GC. This was
never intended to be allowed.
-rw-r--r-- | Zend/tests/generators/dynamic_properties.phpt | 19 | ||||
-rw-r--r-- | Zend/zend_generators.c | 2 |
2 files changed, 20 insertions, 1 deletions
diff --git a/Zend/tests/generators/dynamic_properties.phpt b/Zend/tests/generators/dynamic_properties.phpt new file mode 100644 index 0000000000..d42eed914a --- /dev/null +++ b/Zend/tests/generators/dynamic_properties.phpt @@ -0,0 +1,19 @@ +--TEST-- +It's not possible to assign dynamic properties on a generator +--FILE-- +<?php + +function gen() { + yield; +} + +$gen = gen(); +try { + $gen->prop = 42; +} catch (Error $e) { + echo $e->getMessage(), "\n"; +} + +?> +--EXPECT-- +Cannot create dynamic property Generator::$prop diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c index 13f06a4c34..cbb0a10d06 100644 --- a/Zend/zend_generators.c +++ b/Zend/zend_generators.c @@ -1159,7 +1159,7 @@ void zend_register_generator_ce(void) /* {{{ */ INIT_CLASS_ENTRY(ce, "Generator", class_Generator_methods); zend_ce_generator = zend_register_internal_class(&ce); - zend_ce_generator->ce_flags |= ZEND_ACC_FINAL; + zend_ce_generator->ce_flags |= ZEND_ACC_FINAL | ZEND_ACC_NO_DYNAMIC_PROPERTIES; zend_ce_generator->create_object = zend_generator_create; zend_ce_generator->serialize = zend_class_serialize_deny; zend_ce_generator->unserialize = zend_class_unserialize_deny; |