diff options
| author | Nikita Popov <nikita.ppv@gmail.com> | 2019-05-22 11:13:28 +0200 |
|---|---|---|
| committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-05-23 10:41:10 +0200 |
| commit | 64918c770282c0f60b407e8de3201a6b68c88e78 (patch) | |
| tree | e9d8fa1e7ad2f07729f6aacf4f5ac7747bd74339 /Zend/zend_interfaces.c | |
| parent | fdb7fc6153cfa8788d11e3dc74bc4f899bcdd42a (diff) | |
| download | php-git-64918c770282c0f60b407e8de3201a6b68c88e78.tar.gz | |
Forbid use of not fully linked classes
Diffstat (limited to 'Zend/zend_interfaces.c')
| -rw-r--r-- | Zend/zend_interfaces.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/Zend/zend_interfaces.c b/Zend/zend_interfaces.c index fe4c9ed9a3..6c918c09fb 100644 --- a/Zend/zend_interfaces.c +++ b/Zend/zend_interfaces.c @@ -291,7 +291,7 @@ static int zend_implement_traversable(zend_class_entry *interface, zend_class_en return SUCCESS; } if (class_type->num_interfaces) { - ZEND_ASSERT(class_type->ce_flags & ZEND_ACC_LINKED); + ZEND_ASSERT(class_type->ce_flags & (ZEND_ACC_LINKED|ZEND_ACC_LINKING_IN_PROGRESS)); for (i = 0; i < class_type->num_interfaces; i++) { if (class_type->interfaces[i] == zend_ce_aggregate || class_type->interfaces[i] == zend_ce_iterator) { return SUCCESS; @@ -321,7 +321,7 @@ static int zend_implement_aggregate(zend_class_entry *interface, zend_class_entr } else if (class_type->get_iterator != zend_user_it_get_new_iterator) { /* c-level get_iterator cannot be changed (exception being only Traversable is implemented) */ if (class_type->num_interfaces) { - ZEND_ASSERT(class_type->ce_flags & ZEND_ACC_LINKED); + ZEND_ASSERT(class_type->ce_flags & (ZEND_ACC_LINKED|ZEND_ACC_LINKING_IN_PROGRESS)); for (i = 0; i < class_type->num_interfaces; i++) { if (class_type->interfaces[i] == zend_ce_iterator) { zend_error_noreturn(E_ERROR, "Class %s cannot implement both %s and %s at the same time", |
