diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2020-09-15 15:26:56 +0200 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-09-15 15:27:17 +0200 |
commit | a009d370e93fdc5928b2de9321d433ca39e7c6e6 (patch) | |
tree | 457aafd240d026790bcff848f875545b12ad358f | |
parent | b1c5532ad12512def76f9b5f03a2cdc943c58fb2 (diff) | |
parent | 2bbf2a91aacd59d3511b5e22cac064d708140caa (diff) | |
download | php-git-a009d370e93fdc5928b2de9321d433ca39e7c6e6.tar.gz |
Merge branch 'PHP-7.4'
* PHP-7.4:
Fix assumption about property guard hash value
-rw-r--r-- | Zend/tests/property_guard_hash_val.phpt | 16 | ||||
-rw-r--r-- | Zend/zend_object_handlers.c | 4 |
2 files changed, 18 insertions, 2 deletions
diff --git a/Zend/tests/property_guard_hash_val.phpt b/Zend/tests/property_guard_hash_val.phpt new file mode 100644 index 0000000000..69f1959a03 --- /dev/null +++ b/Zend/tests/property_guard_hash_val.phpt @@ -0,0 +1,16 @@ +--TEST-- +Test property guard hash value assumption +--FILE-- +<?php +class Test { + function __get($var) { + return $this->{$var.''}; + } +} + +$test = new Test; +var_dump($test->x); +?> +--EXPECTF-- +Warning: Undefined property: Test::$x in %s on line %d +NULL diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index be8ab3aca7..ecf5c71ed8 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -508,8 +508,8 @@ ZEND_API uint32_t *zend_get_property_guard(zend_object *zobj, zend_string *membe if (EXPECTED(Z_TYPE_P(zv) == IS_STRING)) { zend_string *str = Z_STR_P(zv); if (EXPECTED(str == member) || - /* hash values are always pred-calculated here */ - (EXPECTED(ZSTR_H(str) == ZSTR_H(member)) && + /* "str" always has a pre-calculated hash value here */ + (EXPECTED(ZSTR_H(str) == zend_string_hash_val(member)) && EXPECTED(zend_string_equal_content(str, member)))) { return &Z_PROPERTY_GUARD_P(zv); } else if (EXPECTED(Z_PROPERTY_GUARD_P(zv) == 0)) { |