summaryrefslogtreecommitdiff
path: root/Zend/tests/class_constant_to_reference_cached.phpt
Commit message (Collapse)AuthorAgeFilesLines
* Improve class constant fetch fixNikita Popov2014-05-291-9/+8
| | | | | | | | | | | | Dereference the cached constant for Test::TEST as well (and not just self::TEST). Also improve the phpt file to test this case as well - previously this only manifested with opcache enabled, due to literal sharing. Additionally the Z_TYPE_P != IS_REFERENCE assertion is now moved into the TMP_VAR fetching code (as it applies to more than just property assignments.)
* Fix class constant fetchingNikita Popov2014-05-291-0/+31
If a class is extended after the constant fetch has been cached the cached value will be turned into a reference. On the next fetch the polymorphic cache will return this reference, which will be directly returned. The object assignment code then dereferences this result and performs a shallow copy, which is invalid for references. This subsequently leads to the constant value being prematurely freed. This is fixed by dereferencing the value returned from the polymorphic cache. Furthermore the incorrect dereference from in the object assignment code is replaced with an assertion that we're dealing with a non-reference, so ensure that this kind of problem cannot go unnoticed in the future.