]> granicus.if.org Git - php/commitdiff
Fixed un-initilized iterator in DirectoyItrator
authorXinchen Hui <laruence@gmail.com>
Fri, 28 Feb 2014 08:06:47 +0000 (16:06 +0800)
committerXinchen Hui <laruence@gmail.com>
Fri, 28 Feb 2014 08:06:47 +0000 (16:06 +0800)
ext/reflection/php_reflection.c
ext/spl/spl_directory.c

index e82e13248e42f54a57a6eab43efd3999569db870..bbe66fbc6cf051c38bf2f77c0674be62ee21a257 100644 (file)
@@ -4175,7 +4175,7 @@ ZEND_METHOD(reflection_class, isInstance)
    Returns an instance of this class */
 ZEND_METHOD(reflection_class, newInstance)
 {
-       zval *retval_ptr = NULL;
+       zval retval;
        reflection_object *intern;
        zend_class_entry *ce, *old_scope;
        zend_function *constructor;
@@ -4216,7 +4216,7 @@ ZEND_METHOD(reflection_class, newInstance)
                ZVAL_UNDEF(&fci.function_name);
                fci.symbol_table = NULL;
                fci.object_ptr = return_value;
-               fci.retval = retval_ptr;
+               fci.retval = &retval;
                fci.param_count = num_args;
                fci.params = params;
                fci.no_separation = 1;
@@ -4231,15 +4231,15 @@ ZEND_METHOD(reflection_class, newInstance)
                        if (params) {
                                efree(params);
                        }
-                       if (retval_ptr) {
-                               zval_ptr_dtor(retval_ptr);
+                       if (!ZVAL_IS_UNDEF(&retval)) {
+                               zval_ptr_dtor(&retval);
                        }
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invocation of %s's constructor failed", ce->name->val);
                        zval_dtor(return_value);
                        RETURN_NULL();
                }
-               if (retval_ptr) {
-                       zval_ptr_dtor(retval_ptr);
+               if (!ZVAL_IS_UNDEF(&retval)) {
+                       zval_ptr_dtor(&retval);
                }
                if (params) {
                        efree(params);
index fcfeb33f07b2e3704783fc0c47d638b51cd741c6..604aca7e81e889e6506cde5df36aaf7ef6037f0b 100644 (file)
@@ -158,6 +158,7 @@ static zend_object *spl_filesystem_object_new_ex(zend_class_entry *class_type TS
 
        zend_object_std_init(&intern->std, class_type TSRMLS_CC);
        object_properties_init(&intern->std, class_type);
+       zend_iterator_init(&intern->it.intern TSRMLS_CC);
 
        intern->std.handlers = &spl_filesystem_object_handlers;
        return &intern->std;