summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2010-08-11 08:34:54 +0000
committerDmitry Stogov <dmitry@php.net>2010-08-11 08:34:54 +0000
commit7566ff38a1af69ad4463764861a99be864b63df0 (patch)
treee64dd8e6b76a27f648252a265e7176fdc58d2bdb
parentc10bb27254ed67a30e358eb673936de66ee0543f (diff)
downloadphp-git-7566ff38a1af69ad4463764861a99be864b63df0.tar.gz
Fixed support for static properties of internal classes
-rw-r--r--Zend/zend_API.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/Zend/zend_API.c b/Zend/zend_API.c
index cfef4fa14b..11dd8c701e 100644
--- a/Zend/zend_API.c
+++ b/Zend/zend_API.c
@@ -1044,12 +1044,15 @@ ZEND_API void zend_update_class_constants(zend_class_entry *class_type TSRMLS_DC
p = &class_type->default_static_members_table[i];
if (Z_ISREF_PP(p) &&
class_type->parent &&
- class_type->parent->default_static_members_count < i &&
- *p == class_type->parent->default_static_members_table[i]
+ i < class_type->parent->default_static_members_count &&
+ *p == class_type->parent->default_static_members_table[i] &&
+ CE_STATIC_MEMBERS(class_type->parent)[i]
) {
- Z_ADDREF_PP(p);
- Z_SET_ISREF_PP(p);
- CE_STATIC_MEMBERS(class_type)[i] = *p;
+ zval *q = CE_STATIC_MEMBERS(class_type->parent)[i];
+
+ Z_ADDREF_P(q);
+ Z_SET_ISREF_P(q);
+ CE_STATIC_MEMBERS(class_type)[i] = q;
} else {
zval *r;