]> granicus.if.org Git - php/commitdiff
Fixed memory leaks
authorDmitry Stogov <dmitry@php.net>
Tue, 18 Apr 2006 06:58:43 +0000 (06:58 +0000)
committerDmitry Stogov <dmitry@php.net>
Tue, 18 Apr 2006 06:58:43 +0000 (06:58 +0000)
main/php_variables.c
sapi/cgi/cgi_main.c

index 42d16bffb860f50741e33e5c456b3a183128b335..04fb6edb4071e6e7cf65b0c9f39822496e6cfcd8 100644 (file)
@@ -421,10 +421,8 @@ static void php_build_argv(char *s, zval *track_vars_array TSRMLS_DC)
                return;
        }
        
-       ALLOC_ZVAL(arr);
+       ALLOC_INIT_ZVAL(arr);
        array_init(arr);
-       arr->is_ref = 0;
-       arr->refcount = 0;
 
        /* Prepare argv */
        if (SG(request_info).argc) { /* are we in cli sapi? */
@@ -470,15 +468,13 @@ static void php_build_argv(char *s, zval *track_vars_array TSRMLS_DC)
        }
 
        /* prepare argc */
-       ALLOC_ZVAL(argc);
+       ALLOC_INIT_ZVAL(argc);
        if (SG(request_info).argc) {
                Z_LVAL_P(argc) = SG(request_info).argc;
        } else {
                Z_LVAL_P(argc) = count;
        }
        Z_TYPE_P(argc) = IS_LONG;
-       argc->is_ref = 0;
-       argc->refcount = 0;
 
        if (PG(register_globals) || SG(request_info).argc) {
                arr->refcount++;
@@ -492,6 +488,8 @@ static void php_build_argv(char *s, zval *track_vars_array TSRMLS_DC)
                zend_hash_update(Z_ARRVAL_P(track_vars_array), "argv", sizeof("argv"), &arr, sizeof(zval *), NULL);
                zend_hash_update(Z_ARRVAL_P(track_vars_array), "argc", sizeof("argc"), &argc, sizeof(zval *), NULL);
        }
+       zval_ptr_dtor(&arr);
+       zval_ptr_dtor(&argc);
 }
 /* }}} */
 
index a7460c8cc4173d9c5a2a3179c5dd91c5d97cdb64..2aaae382f09dc068299ff52dd45967b5dc6ad68e 100644 (file)
@@ -433,12 +433,16 @@ void cgi_php_import_environment_variables(zval *array_ptr TSRMLS_DC)
 {
        if (PG(http_globals)[TRACK_VARS_ENV] &&
            array_ptr != PG(http_globals)[TRACK_VARS_ENV]) {
+           zval_dtor(array_ptr);
            *array_ptr = *PG(http_globals)[TRACK_VARS_ENV];
+           INIT_PZVAL(array_ptr);
            zval_copy_ctor(array_ptr);
            return;
        } else if (PG(http_globals)[TRACK_VARS_SERVER] &&
                array_ptr != PG(http_globals)[TRACK_VARS_SERVER]) {
+           zval_dtor(array_ptr);
            *array_ptr = *PG(http_globals)[TRACK_VARS_SERVER];
+           INIT_PZVAL(array_ptr);
            zval_copy_ctor(array_ptr);
            return;
        }