From: Rasmus Lerdorf Date: Sat, 30 Aug 2008 16:53:05 +0000 (+0000) Subject: Fix for bugs 13961, 39927 and 45947 X-Git-Tag: BEFORE_HEAD_NS_CHANGE~516 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d07786088ea6d684ac9d79c290625601564f910f;p=php Fix for bugs 13961, 39927 and 45947 --- diff --git a/main/php_variables.c b/main/php_variables.c index f823e53bb8..46aa187374 100644 --- a/main/php_variables.c +++ b/main/php_variables.c @@ -66,11 +66,12 @@ PHPAPI void php_u_register_variable_safe(UChar *var, UChar *strval, int str_len, php_u_register_variable_ex(var, &new_entry, track_vars_array TSRMLS_CC); } -PHPAPI void php_register_variable_ex(char *var, zval *val, zval *track_vars_array TSRMLS_DC) +PHPAPI void php_register_variable_ex(char *var_name, zval *val, zval *track_vars_array TSRMLS_DC) { char *p = NULL; char *ip; /* index pointer */ char *index; + char *var, *var_orig; int var_len, index_len; zval *gpc_element, **gpc_element_p; zend_bool is_array = 0; @@ -92,6 +93,8 @@ PHPAPI void php_register_variable_ex(char *var, zval *val, zval *track_vars_arra * Prepare variable name */ + var_orig = estrdup(var_name); + var = var_orig; /* ignore leading spaces in the variable name */ while (*var && *var==' ') { var++; @@ -112,6 +115,7 @@ PHPAPI void php_register_variable_ex(char *var, zval *val, zval *track_vars_arra if (var_len==0) { /* empty variable name, or variable name with a space in it */ zval_dtor(val); + efree(var_orig); return; } @@ -120,6 +124,7 @@ PHPAPI void php_register_variable_ex(char *var, zval *val, zval *track_vars_arra var_len == sizeof("GLOBALS")-1 && !memcmp(var, "GLOBALS", sizeof("GLOBALS")-1)) { zval_dtor(val); + efree(var_orig); return; } @@ -146,6 +151,7 @@ PHPAPI void php_register_variable_ex(char *var, zval *val, zval *track_vars_arra if (!PG(display_errors)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Input variable nesting level exceeded %ld. To increase the limit change max_input_nesting_level in php.ini.", PG(max_input_nesting_level)); } + efree(var_orig); return; } @@ -221,6 +227,7 @@ plain_var: } } } + efree(var_orig); } PHPAPI void php_u_register_variable_ex(UChar *var, zval *val, zval *track_vars_array TSRMLS_DC)