Skip to content

Commit 174dadf

Browse files
committed
Don't allow dynamic properties on generators
Noticed this because we leak those properties in GC. This was never intended to be allowed.
1 parent 628db3f commit 174dadf

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
--TEST--
2+
It's not possible to assign dynamic properties on a generator
3+
--FILE--
4+
<?php
5+
6+
function gen() {
7+
yield;
8+
}
9+
10+
$gen = gen();
11+
try {
12+
$gen->prop = 42;
13+
} catch (Error $e) {
14+
echo $e->getMessage(), "\n";
15+
}
16+
17+
?>
18+
--EXPECT--
19+
Cannot create dynamic property Generator::$prop

Zend/zend_generators.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1159,7 +1159,7 @@ void zend_register_generator_ce(void) /* {{{ */
11591159

11601160
INIT_CLASS_ENTRY(ce, "Generator", class_Generator_methods);
11611161
zend_ce_generator = zend_register_internal_class(&ce);
1162-
zend_ce_generator->ce_flags |= ZEND_ACC_FINAL;
1162+
zend_ce_generator->ce_flags |= ZEND_ACC_FINAL | ZEND_ACC_NO_DYNAMIC_PROPERTIES;
11631163
zend_ce_generator->create_object = zend_generator_create;
11641164
zend_ce_generator->serialize = zend_class_serialize_deny;
11651165
zend_ce_generator->unserialize = zend_class_unserialize_deny;

0 commit comments

Comments
 (0)