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.netdiff --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-2024 The PHP Group All rights reserved. |
Last updated: Mon Oct 14 18:01:28 2024 UTC |