]> granicus.if.org Git - php/commitdiff
Fixed Issue #1400 (double free static property)
authorXinchen Hui <laruence@php.net>
Fri, 10 Jul 2015 07:27:06 +0000 (15:27 +0800)
committerXinchen Hui <laruence@php.net>
Fri, 10 Jul 2015 07:27:06 +0000 (15:27 +0800)
Zend/zend_inheritance.c

index 64e7407f12d26f2599f4571373dd9e3eb81b2101..9b96a4a4798407e780bbd6980ec41d990359c522 100644 (file)
@@ -821,7 +821,13 @@ ZEND_API void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent
                do {
                        dst--;
                        src--;
-                       ZVAL_MAKE_REF(src);
+                       if (parent_ce->type == ZEND_INTERNAL_CLASS) {
+                               if (!Z_ISREF_P(src)) {
+                                       ZVAL_NEW_PERSISTENT_REF(src, src);
+                               }
+                       } else {
+                               ZVAL_MAKE_REF(src);
+                       }
                        ZVAL_COPY_VALUE(dst, src);
                        Z_ADDREF_P(dst);
                        if (Z_CONSTANT_P(Z_REFVAL_P(dst))) {