Fixed memory leaks

This commit is contained in:
Dmitry Stogov 2006-04-18 06:58:54 +00:00
parent d2de055ef1
commit 83657db8ff
2 changed files with 8 additions and 6 deletions

View file

@ -627,10 +627,8 @@ static void php_build_argv(char *s, zval *track_vars_array TSRMLS_DC)
return; return;
} }
ALLOC_ZVAL(arr); ALLOC_INIT_ZVAL(arr);
array_init(arr); array_init(arr);
arr->is_ref = 0;
arr->refcount = 0;
/* Prepare argv */ /* Prepare argv */
if (SG(request_info).argc) { /* are we in cli sapi? */ if (SG(request_info).argc) { /* are we in cli sapi? */
@ -670,15 +668,13 @@ static void php_build_argv(char *s, zval *track_vars_array TSRMLS_DC)
} }
/* prepare argc */ /* prepare argc */
ALLOC_ZVAL(argc); ALLOC_INIT_ZVAL(argc);
if (SG(request_info).argc) { if (SG(request_info).argc) {
Z_LVAL_P(argc) = SG(request_info).argc; Z_LVAL_P(argc) = SG(request_info).argc;
} else { } else {
Z_LVAL_P(argc) = count; Z_LVAL_P(argc) = count;
} }
Z_TYPE_P(argc) = IS_LONG; Z_TYPE_P(argc) = IS_LONG;
argc->is_ref = 0;
argc->refcount = 0;
if (SG(request_info).argc) { if (SG(request_info).argc) {
arr->refcount++; arr->refcount++;
@ -692,6 +688,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), "argv", sizeof("argv"), &arr, sizeof(zval *), NULL);
zend_hash_update(Z_ARRVAL_P(track_vars_array), "argc", sizeof("argc"), &argc, 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);
} }
/* }}} */ /* }}} */

View file

@ -412,12 +412,16 @@ void cgi_php_import_environment_variables(zval *array_ptr TSRMLS_DC)
{ {
if (PG(http_globals)[TRACK_VARS_ENV] && if (PG(http_globals)[TRACK_VARS_ENV] &&
array_ptr != 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]; *array_ptr = *PG(http_globals)[TRACK_VARS_ENV];
INIT_PZVAL(array_ptr);
zval_copy_ctor(array_ptr); zval_copy_ctor(array_ptr);
return; return;
} else if (PG(http_globals)[TRACK_VARS_SERVER] && } else if (PG(http_globals)[TRACK_VARS_SERVER] &&
array_ptr != 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]; *array_ptr = *PG(http_globals)[TRACK_VARS_SERVER];
INIT_PZVAL(array_ptr);
zval_copy_ctor(array_ptr); zval_copy_ctor(array_ptr);
return; return;
} }