com php-src: don't use memset() for array of zval initialization: Zend/zend_execute.c Zend/zend_objects.c
| From: | Dmitry Stogov | Date: | Mon, 07 Apr 2014 08:14:44 +0000 |
| Subject: | com php-src: don't use memset() for array of zval initialization: Zend/zend_execute.c Zend/zend_objects.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-77471@lists.php.net to get a copy of this message | ||
Commit: df7293b07250360f9e9cb113bab54618d1a26881
Author: Dmitry Stogov <dmitry@zend.com> Mon, 7 Apr 2014 12:14:44 +0400
Parents: 8b2bb3013733fd465f8dbe24ffac8418e737463b
Branches: phpng
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=df7293b07250360f9e9cb113bab54618d1a26881
Log:
don't use memset() for array of zval initialization
Changed paths:
M Zend/zend_execute.c
M Zend/zend_objects.c
Diff:
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index 3e574e7..31c2514 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -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);
diff --git a/Zend/zend_objects.c b/Zend/zend_objects.c
index bf985b1..35b237e 100644
--- a/Zend/zend_objects.c
+++ b/Zend/zend_objects.c
@@ -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)