]> granicus.if.org Git - php/commitdiff
Fixed possible double free of class static members
authorDmitry Stogov <dmitry@zend.com>
Fri, 23 Jan 2015 14:10:05 +0000 (17:10 +0300)
committerDmitry Stogov <dmitry@zend.com>
Fri, 23 Jan 2015 14:10:05 +0000 (17:10 +0300)
Zend/zend_opcode.c

index 9f2578494074cc64c1027c83f4ee9fcc84efca9b..aa2abb2f6bf10bb768f09530a22d9801b60a28b0 100644 (file)
@@ -151,13 +151,15 @@ ZEND_API void zend_cleanup_user_class_data(zend_class_entry *ce)
        }
        if (ce->static_members_table) {
                zval *static_members = ce->static_members_table;
+               int count = ce->default_static_members_count;
                int i;
 
-               ce->static_members_table = NULL;
-               for (i = 0; i < ce->default_static_members_count; i++) {
+               ce->default_static_members_count = 0;
+               ce->default_static_members_table = ce->static_members_table = NULL;
+               for (i = 0; i < count; i++) {
                        zval_ptr_dtor(&static_members[i]);
-                       ZVAL_UNDEF(&static_members[i]);
                }
+               efree(static_members);
        }
 }