|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
Patch bug64235.patch for Scripting Engine problem Bug #64235Patch version 2013-02-20 08:07 UTC Return to Bug #64235 | Download this patchThis patch renders other patches obsolete Obsolete patches: Patch Revisions:Developer: laruence@php.net
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index a3f4fe5..5744e61 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -3859,6 +3859,10 @@ static void zend_check_trait_usage(zend_class_entry *ce, zend_class_entry *trait
{
zend_uint i;
+ if ((trait->ce_flags & ZEND_ACC_TRAIT) != ZEND_ACC_TRAIT) {
+ zend_error(E_COMPILE_ERROR, "Class %s is not a trait", trait->name);
+ }
+
for (i = 0; i < ce->num_traits; i++) {
if (ce->traits[i] == trait) {
return;
@@ -3887,7 +3891,10 @@ static void zend_traits_init_trait_structures(zend_class_entry *ce TSRMLS_DC) /*
ZEND_FETCH_CLASS_TRAIT|ZEND_FETCH_CLASS_NO_AUTOLOAD TSRMLS_CC))) {
zend_error(E_COMPILE_ERROR, "Could not find trait %s", cur_method_ref->class_name);
}
- zend_check_trait_usage(ce, cur_precedence->trait_method->ce TSRMLS_CC);
+
+ if ((cur_precedence->trait_method->ce->ce_flags & ZEND_ACC_TRAIT) == ZEND_ACC_TRAIT) {
+ zend_check_trait_usage(ce, cur_precedence->trait_method->ce TSRMLS_CC);
+ }
/** Ensure that the prefered method is actually available. */
lcname = zend_str_tolower_dup(cur_method_ref->method_name,
@@ -3916,8 +3923,11 @@ static void zend_traits_init_trait_structures(zend_class_entry *ce TSRMLS_DC) /*
if (!(cur_precedence->exclude_from_classes[j] = zend_fetch_class(class_name, name_length, ZEND_FETCH_CLASS_TRAIT |ZEND_FETCH_CLASS_NO_AUTOLOAD TSRMLS_CC))) {
zend_error(E_COMPILE_ERROR, "Could not find trait %s", class_name);
- }
- zend_check_trait_usage(ce, cur_precedence->exclude_from_classes[j] TSRMLS_CC);
+ }
+
+ if ((cur_precedence->exclude_from_classes[j]->ce_flags & ZEND_ACC_TRAIT) == ZEND_ACC_TRAIT) {
+ zend_check_trait_usage(ce, cur_precedence->exclude_from_classes[j] TSRMLS_CC);
+ }
/* make sure that the trait method is not from a class mentioned in
exclude_from_classes, for consistency */
|
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Wed Oct 29 22:00:02 2025 UTC |