From 174dadf6b476a11c72646294700e62fe911366cb Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Mon, 7 Sep 2020 19:06:53 +0200 Subject: [PATCH] Don't allow dynamic properties on generators Noticed this because we leak those properties in GC. This was never intended to be allowed. --- Zend/tests/generators/dynamic_properties.phpt | 19 +++++++++++++++++++ Zend/zend_generators.c | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 Zend/tests/generators/dynamic_properties.phpt diff --git a/Zend/tests/generators/dynamic_properties.phpt b/Zend/tests/generators/dynamic_properties.phpt new file mode 100644 index 00000000000..d42eed914ab --- /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-- +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 13f06a4c343..cbb0a10d06e 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;