Merge branch 'PHP-8.1'

* PHP-8.1:
  Fix bug #81630: Don't claim known hash in getTraitAliases()
  Assert hash is known when we claim it is
This commit is contained in:
Nikita Popov 2021-11-17 15:55:25 +01:00
commit aaba0000d3
2 changed files with 7 additions and 9 deletions

View file

@ -664,6 +664,7 @@ static zend_always_inline Bucket *zend_hash_find_bucket(const HashTable *ht, zen
if (known_hash) {
h = ZSTR_H(key);
ZEND_ASSERT(h != 0 && "Hash must be known");
} else {
h = zend_string_hash_val(key);
}

View file

@ -5116,18 +5116,15 @@ ZEND_METHOD(ReflectionClass, getTraitAliases)
if (!class_name) {
uint32_t j = 0;
zval *zv;
zend_class_entry *trait;
zend_string *lcname = zend_string_tolower(cur_ref->method_name);
for (j = 0; j < ce->num_traits; j++) {
zv = zend_hash_find_known_hash(CG(class_table), ce->trait_names[j].lc_name);
if (zv) {
trait = Z_CE_P(zv);
if (zend_hash_exists(&trait->function_table, lcname)) {
class_name = trait->name;
break;
}
zend_class_entry *trait =
zend_hash_find_ptr(CG(class_table), ce->trait_names[j].lc_name);
ZEND_ASSERT(trait && "Trait must exist");
if (zend_hash_exists(&trait->function_table, lcname)) {
class_name = trait->name;
break;
}
}
zend_string_release_ex(lcname, 0);