]> granicus.if.org Git - php/commitdiff
don't use memset() for array of zval initialization
authorDmitry Stogov <dmitry@zend.com>
Mon, 7 Apr 2014 08:14:44 +0000 (12:14 +0400)
committerDmitry Stogov <dmitry@zend.com>
Mon, 7 Apr 2014 08:14:44 +0000 (12:14 +0400)
Zend/zend_execute.c
Zend/zend_objects.c

index 3e574e7491fda34f3dfe396da09835eeeaf76637..31c25149137171874433b300c1c7babc3f8d8d7d 100644 (file)
@@ -1614,7 +1614,16 @@ static zend_always_inline zend_execute_data *i_create_execute_data_from_op_array
                EX(prev_execute_data) = EG(current_execute_data);
        }
 
-       memset(EX_VAR_NUM(0), 0, sizeof(zval) * op_array->last_var);
+       do {
+               /* Initialize CV variables */
+               zval *var = EX_VAR_NUM(0);
+               zval *end = var + op_array->last_var;
+
+               while (var != end) {
+                       ZVAL_UNDEF(var);
+                       var++;
+               }
+       } while (0);
 
        EX(call_slots) = (call_slot*)((char *)execute_data + execute_data_size + vars_size);
 
index bf985b12bc5a20ca6714887cb3fcfad41a5ff1de..35b237e132405cf9e25b60efb243ffd340b2cea7 100644 (file)
@@ -33,8 +33,16 @@ ZEND_API void zend_object_std_init(zend_object *object, zend_class_entry *ce TSR
        object->ce = ce;
        object->properties = NULL;
        object->guards = NULL;
-       memset(object->properties_table, 0, sizeof(zval) * ce->default_properties_count);
        zend_objects_store_put(object);
+       if (EXPECTED(ce->default_properties_count != 0)) {
+               zval *p = object->properties_table;
+               zval *end = p + ce->default_properties_count;
+
+               do {
+                       ZVAL_UNDEF(p);
+                       p++;
+               } while (p != end);
+       }
 }
 
 ZEND_API void zend_object_std_dtor(zend_object *object TSRMLS_DC)