diff options
author | Dmitry Stogov <dmitry@php.net> | 2012-02-02 10:26:53 +0000 |
---|---|---|
committer | Dmitry Stogov <dmitry@php.net> | 2012-02-02 10:26:53 +0000 |
commit | 89bc5ece51dde3edcb63fb8429d544cdcf8f1b60 (patch) | |
tree | 61aa2aa3d62674f4c48c197a8e598a7438417261 /main | |
parent | 40d8cd1f122873af7e21dfe4cad24702c4be48f9 (diff) | |
download | php-git-89bc5ece51dde3edcb63fb8429d544cdcf8f1b60.tar.gz |
Fixed memory leaks
Diffstat (limited to 'main')
-rw-r--r-- | main/php_variables.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/main/php_variables.c b/main/php_variables.c index 8dd5c140c0..e50f5f7f7c 100644 --- a/main/php_variables.c +++ b/main/php_variables.c @@ -182,7 +182,12 @@ PHPAPI void php_register_variable_ex(char *var_name, zval *val, zval *track_vars if (!index) { MAKE_STD_ZVAL(gpc_element); array_init(gpc_element); - zend_hash_next_index_insert(symtable1, &gpc_element, sizeof(zval *), (void **) &gpc_element_p); + if (zend_hash_next_index_insert(symtable1, &gpc_element, sizeof(zval *), (void **) &gpc_element_p) == FAILURE) { + zval_ptr_dtor(&gpc_element); + zval_dtor(val); + efree(var_orig); + return; + } } else { if (PG(magic_quotes_gpc)) { escaped_index = php_addslashes(index, index_len, &index_len, 0 TSRMLS_CC); @@ -199,6 +204,10 @@ PHPAPI void php_register_variable_ex(char *var_name, zval *val, zval *track_vars array_init(gpc_element); zend_symtable_update(symtable1, escaped_index, index_len + 1, &gpc_element, sizeof(zval *), (void **) &gpc_element_p); } else { + if (index != escaped_index) { + efree(escaped_index); + } + zval_dtor(val); efree(var_orig); return; } @@ -226,7 +235,9 @@ plain_var: gpc_element->value = val->value; Z_TYPE_P(gpc_element) = Z_TYPE_P(val); if (!index) { - zend_hash_next_index_insert(symtable1, &gpc_element, sizeof(zval *), (void **) &gpc_element_p); + if (zend_hash_next_index_insert(symtable1, &gpc_element, sizeof(zval *), (void **) &gpc_element_p) == FAILURE) { + zval_ptr_dtor(&gpc_element); + } } else { if (PG(magic_quotes_gpc)) { escaped_index = php_addslashes(index, index_len, &index_len, 0 TSRMLS_CC); |