mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Preserve original ce_flags when registering class
Bug that regularly sneaks in: ZEND_ACC_FINAL is set before calling zend_register_internal_class() and promptly gets ignored. Remove this footgun by preserving flags from the original CE.
This commit is contained in:
parent
777aa9163d
commit
236ddc56a2
2 changed files with 11 additions and 1 deletions
|
@ -2577,7 +2577,7 @@ static zend_class_entry *do_register_internal_class(zend_class_entry *orig_class
|
|||
|
||||
class_entry->type = ZEND_INTERNAL_CLASS;
|
||||
zend_initialize_class_data(class_entry, 0);
|
||||
class_entry->ce_flags = ce_flags | ZEND_ACC_CONSTANTS_UPDATED | ZEND_ACC_LINKED | ZEND_ACC_RESOLVED_PARENT | ZEND_ACC_RESOLVED_INTERFACES;
|
||||
class_entry->ce_flags = orig_class_entry->ce_flags | ce_flags | ZEND_ACC_CONSTANTS_UPDATED | ZEND_ACC_LINKED | ZEND_ACC_RESOLVED_PARENT | ZEND_ACC_RESOLVED_INTERFACES;
|
||||
class_entry->info.internal.module = EG(current_module);
|
||||
|
||||
if (class_entry->info.internal.builtin_functions) {
|
||||
|
|
10
ext/reflection/tests/ReflectionAttribute_final.phpt
Normal file
10
ext/reflection/tests/ReflectionAttribute_final.phpt
Normal file
|
@ -0,0 +1,10 @@
|
|||
--TEST--
|
||||
Check that ReflectionAttribute is final
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
class T extends ReflectionAttribute {}
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
Fatal error: Class T may not inherit from final class (ReflectionAttribute) in %s on line %d
|
Loading…
Add table
Add a link
Reference in a new issue