Properly resolve magic method of preloaded classes inherited from internal ones.

This commit is contained in:
Dmitry Stogov 2018-11-09 13:07:03 +03:00
parent 34645aeb42
commit 45fdd034ce

View file

@ -989,43 +989,82 @@ static int zend_update_parent_ce(zval *zv)
/* update methods */
if (ce->constructor) {
ce->constructor = zend_shared_alloc_get_xlat_entry(ce->constructor);
zend_function *tmp = zend_shared_alloc_get_xlat_entry(ce->constructor);
if (tmp != NULL) {
ce->constructor = tmp;
}
}
if (ce->destructor) {
ce->destructor = zend_shared_alloc_get_xlat_entry(ce->destructor);
zend_function *tmp = zend_shared_alloc_get_xlat_entry(ce->destructor);
if (tmp != NULL) {
ce->destructor = tmp;
}
}
if (ce->clone) {
ce->clone = zend_shared_alloc_get_xlat_entry(ce->clone);
zend_function *tmp = zend_shared_alloc_get_xlat_entry(ce->clone);
if (tmp != NULL) {
ce->clone = tmp;
}
}
if (ce->__get) {
ce->__get = zend_shared_alloc_get_xlat_entry(ce->__get);
zend_function *tmp = zend_shared_alloc_get_xlat_entry(ce->__get);
if (tmp != NULL) {
ce->__get = tmp;
}
}
if (ce->__set) {
ce->__set = zend_shared_alloc_get_xlat_entry(ce->__set);
zend_function *tmp = zend_shared_alloc_get_xlat_entry(ce->__set);
if (tmp != NULL) {
ce->__set = tmp;
}
}
if (ce->__call) {
ce->__call = zend_shared_alloc_get_xlat_entry(ce->__call);
zend_function *tmp = zend_shared_alloc_get_xlat_entry(ce->__call);
if (tmp != NULL) {
ce->__call = tmp;
}
}
if (ce->serialize_func) {
ce->serialize_func = zend_shared_alloc_get_xlat_entry(ce->serialize_func);
zend_function *tmp = zend_shared_alloc_get_xlat_entry(ce->serialize_func);
if (tmp != NULL) {
ce->serialize_func = tmp;
}
}
if (ce->unserialize_func) {
ce->unserialize_func = zend_shared_alloc_get_xlat_entry(ce->unserialize_func);
zend_function *tmp = zend_shared_alloc_get_xlat_entry(ce->unserialize_func);
if (tmp != NULL) {
ce->unserialize_func = tmp;
}
}
if (ce->__isset) {
ce->__isset = zend_shared_alloc_get_xlat_entry(ce->__isset);
zend_function *tmp = zend_shared_alloc_get_xlat_entry(ce->__isset);
if (tmp != NULL) {
ce->__isset = tmp;
}
}
if (ce->__unset) {
ce->__unset = zend_shared_alloc_get_xlat_entry(ce->__unset);
zend_function *tmp = zend_shared_alloc_get_xlat_entry(ce->__unset);
if (tmp != NULL) {
ce->__unset = tmp;
}
}
if (ce->__tostring) {
ce->__tostring = zend_shared_alloc_get_xlat_entry(ce->__tostring);
zend_function *tmp = zend_shared_alloc_get_xlat_entry(ce->__tostring);
if (tmp != NULL) {
ce->__tostring = tmp;
}
}
if (ce->__callstatic) {
ce->__callstatic = zend_shared_alloc_get_xlat_entry(ce->__callstatic);
zend_function *tmp = zend_shared_alloc_get_xlat_entry(ce->__callstatic);
if (tmp != NULL) {
ce->__callstatic = tmp;
}
}
if (ce->__debugInfo) {
ce->__debugInfo = zend_shared_alloc_get_xlat_entry(ce->__debugInfo);
zend_function *tmp = zend_shared_alloc_get_xlat_entry(ce->__debugInfo);
if (tmp != NULL) {
ce->__debugInfo = tmp;
}
}
// zend_hash_apply(&ce->properties_info, (apply_func_t) zend_update_property_info_ce);
return 0;