diff options
Diffstat (limited to 'ext/standard')
| -rw-r--r-- | ext/standard/array.c | 96 | ||||
| -rw-r--r-- | ext/standard/basic_functions.c | 42 | ||||
| -rw-r--r-- | ext/standard/type.c | 4 |
3 files changed, 70 insertions, 72 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c index 10a2f8955e..10e181c291 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -1139,18 +1139,18 @@ static int php_array_walk(HashTable *target_hash, zval **userdata, int recursive zval_ptr_dtor(&retval_ptr); } } else { - char *func_name; + zval func_name; if (zend_is_callable(*BG(array_walk_func_name), 0, &func_name)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s()", func_name); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %R()", Z_TYPE(func_name), Z_UNIVAL(func_name)); } else { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s() - function does not exist", func_name); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %R() - function does not exist", Z_TYPE(func_name), Z_UNIVAL(func_name)); } if (key) { zval_ptr_dtor(&key); key = NULL; } - efree(func_name); + zval_dtor(&func_name); break; } } @@ -3127,7 +3127,7 @@ static void php_array_intersect(INTERNAL_FUNCTION_PARAMETERS, int behavior, int int argc, arr_argc, i, c = 0; Bucket ***lists, **list, ***ptrs, *p; - char *callback_name; + zval callback_name; PHP_ARRAY_CMP_FUNC_VARS; @@ -3165,12 +3165,12 @@ static void php_array_intersect(INTERNAL_FUNCTION_PARAMETERS, int behavior, int arr_argc = argc - 1; intersect_data_compare_func = array_user_compare; if (!zend_is_callable(*args[arr_argc], 0, &callback_name)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback %s", callback_name); - efree(callback_name); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback %R", Z_TYPE(callback_name), Z_UNIVAL(callback_name)); + zval_dtor(&callback_name); efree(args); return; } - efree(callback_name); + zval_dtor(&callback_name); BG(user_compare_func_name) = args[arr_argc]; } else { @@ -3206,12 +3206,12 @@ static void php_array_intersect(INTERNAL_FUNCTION_PARAMETERS, int behavior, int } arr_argc = argc - 1; if (!zend_is_callable(*args[arr_argc], 0, &callback_name)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback %s", callback_name); - efree(callback_name); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback %R", Z_TYPE(callback_name), Z_UNIVAL(callback_name)); + zval_dtor(&callback_name); efree(args); return; } - efree(callback_name); + zval_dtor(&callback_name); intersect_key_compare_func = array_key_compare; intersect_data_compare_func = array_user_compare; } else if (data_compare_type == INTERSECT_COMP_DATA_INTERNAL @@ -3225,12 +3225,12 @@ static void php_array_intersect(INTERNAL_FUNCTION_PARAMETERS, int behavior, int } arr_argc = argc - 1; if (!zend_is_callable(*args[arr_argc], 0, &callback_name)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback %s", callback_name); - efree(callback_name); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback %R", Z_TYPE(callback_name), Z_UNIVAL(callback_name)); + zval_dtor(&callback_name); efree(args); return; } - efree(callback_name); + zval_dtor(&callback_name); intersect_key_compare_func = array_user_key_compare; intersect_data_compare_func = array_data_compare; BG(user_compare_func_name) = args[arr_argc]; @@ -3245,19 +3245,19 @@ static void php_array_intersect(INTERNAL_FUNCTION_PARAMETERS, int behavior, int } arr_argc = argc - 2; if (!zend_is_callable(*args[arr_argc], 0, &callback_name)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback %s", callback_name); - efree(callback_name); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback %R", Z_TYPE(callback_name), Z_UNIVAL(callback_name)); + zval_dtor(&callback_name); efree(args); return; } - efree(callback_name); + zval_dtor(&callback_name); if (!zend_is_callable(*args[arr_argc + 1], 0, &callback_name)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback %s", callback_name); - efree(callback_name); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback %R", Z_TYPE(callback_name), Z_UNIVAL(callback_name)); + zval_dtor(&callback_name); efree(args); return; } - efree(callback_name); + zval_dtor(&callback_name); intersect_key_compare_func = array_user_key_compare; intersect_data_compare_func = array_user_compare; BG(user_compare_func_name) = args[arr_argc + 1];/* data - key */ @@ -3511,7 +3511,7 @@ static void php_array_diff(INTERNAL_FUNCTION_PARAMETERS, int behavior, int data_ HashTable *hash; int argc, arr_argc, i, c; Bucket ***lists, **list, ***ptrs, *p; - char *callback_name; + zval callback_name; PHP_ARRAY_CMP_FUNC_VARS; @@ -3550,12 +3550,12 @@ static void php_array_diff(INTERNAL_FUNCTION_PARAMETERS, int behavior, int data_ arr_argc = argc - 1; diff_data_compare_func = array_user_compare; if (!zend_is_callable(*args[arr_argc], 0, &callback_name)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback %s", callback_name); - efree(callback_name); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback %R", Z_TYPE(callback_name), Z_UNIVAL(callback_name)); + zval_dtor(&callback_name); efree(args); return; } - efree(callback_name); + zval_dtor(&callback_name); BG(user_compare_func_name) = args[arr_argc]; } else { @@ -3591,12 +3591,12 @@ static void php_array_diff(INTERNAL_FUNCTION_PARAMETERS, int behavior, int data_ } arr_argc = argc - 1; if (!zend_is_callable(*args[arr_argc], 0, &callback_name)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback %s", callback_name); - efree(callback_name); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback %R", Z_TYPE(callback_name), Z_UNIVAL(callback_name)); + zval_dtor(&callback_name); efree(args); return; } - efree(callback_name); + zval_dtor(&callback_name); diff_key_compare_func = array_key_compare; diff_data_compare_func = array_user_compare; } else if (data_compare_type == DIFF_COMP_DATA_INTERNAL @@ -3610,12 +3610,12 @@ static void php_array_diff(INTERNAL_FUNCTION_PARAMETERS, int behavior, int data_ } arr_argc = argc - 1; if (!zend_is_callable(*args[arr_argc], 0, &callback_name)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback %s", callback_name); - efree(callback_name); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback %R", Z_TYPE(callback_name), Z_UNIVAL(callback_name)); + zval_dtor(&callback_name); efree(args); return; } - efree(callback_name); + zval_dtor(&callback_name); diff_key_compare_func = array_user_key_compare; diff_data_compare_func = array_data_compare; BG(user_compare_func_name) = args[arr_argc]; @@ -3630,19 +3630,19 @@ static void php_array_diff(INTERNAL_FUNCTION_PARAMETERS, int behavior, int data_ } arr_argc = argc - 2; if (!zend_is_callable(*args[arr_argc], 0, &callback_name)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback %s", callback_name); - efree(callback_name); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback %R", Z_TYPE(callback_name), Z_UNIVAL(callback_name)); + zval_dtor(&callback_name); efree(args); return; } - efree(callback_name); + zval_dtor(&callback_name); if (!zend_is_callable(*args[arr_argc + 1], 0, &callback_name)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback %s", callback_name); - efree(callback_name); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a valid callback %R", Z_TYPE(callback_name), Z_UNIVAL(callback_name)); + zval_dtor(&callback_name); efree(args); return; } - efree(callback_name); + zval_dtor(&callback_name); diff_key_compare_func = array_user_key_compare; diff_data_compare_func = array_user_compare; BG(user_compare_func_name) = args[arr_argc + 1];/* data - key*/ @@ -4294,7 +4294,7 @@ PHP_FUNCTION(array_reduce) zval *result = NULL; zval *retval; zend_fcall_info_cache fci_cache = empty_fcall_info_cache; - char *callback_name; + zval callback_name; HashPosition pos; HashTable *htbl; @@ -4309,11 +4309,11 @@ PHP_FUNCTION(array_reduce) } if (!zend_is_callable(*callback, 0, &callback_name)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "The second argument, '%s', should be a valid callback", callback_name); - efree(callback_name); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "The second argument, '%R', should be a valid callback", Z_TYPE(callback_name), Z_UNIVAL(callback_name)); + zval_dtor(&callback_name); return; } - efree(callback_name); + zval_dtor(&callback_name); if (ZEND_NUM_ARGS() > 2) { ALLOC_ZVAL(result); @@ -4385,7 +4385,7 @@ PHP_FUNCTION(array_filter) zval **operand; zval **args[1]; zval *retval = NULL; - char *callback_name; + zval callback_name; char *string_key; zend_fcall_info_cache fci_cache = empty_fcall_info_cache; uint string_key_len; @@ -4404,11 +4404,11 @@ PHP_FUNCTION(array_filter) if (ZEND_NUM_ARGS() > 1) { if (!zend_is_callable(*callback, 0, &callback_name)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "The second argument, '%s', should be a valid callback", callback_name); - efree(callback_name); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "The second argument, '%R', should be a valid callback", Z_TYPE(callback_name), Z_UNIVAL(callback_name)); + zval_dtor(&callback_name); return; } - efree(callback_name); + zval_dtor(&callback_name); } array_init(return_value); @@ -4484,7 +4484,7 @@ PHP_FUNCTION(array_map) zval *result, *null; HashPosition *array_pos; zval **args; - char *callback_name; + zval callback_name; zend_fcall_info_cache fci_cache = empty_fcall_info_cache; int i, k, maxlen = 0; int *array_len; @@ -4505,12 +4505,12 @@ PHP_FUNCTION(array_map) if (Z_TYPE_P(callback) != IS_NULL) { if (!zend_is_callable(callback, 0, &callback_name)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "The first argument, '%s', should be either NULL or a valid callback", callback_name); - efree(callback_name); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "The first argument, '%R', should be either NULL or a valid callback", Z_TYPE(callback_name), Z_UNIVAL(callback_name)); + zval_dtor(&callback_name); efree(pargs); return; } - efree(callback_name); + zval_dtor(&callback_name); } args = (zval **)safe_emalloc(ZEND_NUM_ARGS(), sizeof(zval *), 0); diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index e758b2d3e3..f4f59c6d56 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -2029,7 +2029,7 @@ PHP_FUNCTION(call_user_func) { zval ***params; zval *retval_ptr; - char *name; + zval name; int argc = ZEND_NUM_ARGS(); if (argc < 1) { @@ -2051,8 +2051,9 @@ PHP_FUNCTION(call_user_func) } if (!zend_is_callable(*params[0], IS_CALLABLE_CHECK_NO_ACCESS, &name)) { - php_error_docref1(NULL TSRMLS_CC, name, E_WARNING, "First argument is expected to be a valid callback"); - efree(name); + convert_to_string(&name); + php_error_docref1(NULL TSRMLS_CC, Z_STRVAL(name), E_WARNING, "First argument is expected to be a valid callback"); + zval_dtor(&name); efree(params); RETURN_NULL(); } @@ -2062,22 +2063,23 @@ PHP_FUNCTION(call_user_func) COPY_PZVAL_TO_ZVAL(*return_value, retval_ptr); } } else { + convert_to_string(&name); if (argc > 1) { SEPARATE_ZVAL(params[1]); convert_to_string_ex(params[1]); if (argc > 2) { SEPARATE_ZVAL(params[2]); convert_to_string_ex(params[2]); - php_error_docref1(NULL TSRMLS_CC, name, E_WARNING, "Unable to call %s(%s,%s)", name, Z_STRVAL_PP(params[1]), Z_STRVAL_PP(params[2])); + php_error_docref1(NULL TSRMLS_CC, Z_STRVAL(name), E_WARNING, "Unable to call %R(%s,%s)", Z_TYPE(name), Z_UNIVAL(name), Z_STRVAL_PP(params[1]), Z_STRVAL_PP(params[2])); } else { - php_error_docref1(NULL TSRMLS_CC, name, E_WARNING, "Unable to call %s(%s)", name, Z_STRVAL_PP(params[1])); + php_error_docref1(NULL TSRMLS_CC, Z_STRVAL(name), E_WARNING, "Unable to call %R(%s)", Z_TYPE(name), Z_UNIVAL(name), Z_STRVAL_PP(params[1])); } } else { - php_error_docref1(NULL TSRMLS_CC, name, E_WARNING, "Unable to call %s()", name); + php_error_docref1(NULL TSRMLS_CC, Z_STRVAL(name), E_WARNING, "Unable to call %R()", Z_TYPE(name), Z_UNIVAL(name)); } } - efree(name); + zval_dtor(&name); efree(params); } /* }}} */ @@ -2089,7 +2091,7 @@ PHP_FUNCTION(call_user_func_array) zval ***func_params, **func, **params; zval *retval_ptr; HashTable *func_params_ht; - char *name; + zval name; int count; int current = 0; @@ -2108,8 +2110,8 @@ PHP_FUNCTION(call_user_func_array) } if (!zend_is_callable(*func, IS_CALLABLE_CHECK_NO_ACCESS, &name)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "First argument is expected to be a valid callback, '%s' was given", name); - efree(name); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "First argument is expected to be a valid callback, '%R' was given", Z_TYPE(name), Z_UNIVAL(name)); + zval_dtor(&name); RETURN_NULL(); } @@ -2134,10 +2136,10 @@ PHP_FUNCTION(call_user_func_array) COPY_PZVAL_TO_ZVAL(*return_value, retval_ptr); } } else { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s()", name); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %R()", Z_TYPE(name), Z_UNIVAL(name)); } - efree(name); + zval_dtor(&name); if (func_params) { efree(func_params); } @@ -2256,10 +2258,10 @@ void user_tick_function_dtor(user_tick_function_entry *tick_function_entry) static int user_shutdown_function_call(php_shutdown_function_entry *shutdown_function_entry TSRMLS_DC) { zval retval; - char *function_name = NULL; + zval function_name; if (!zend_is_callable(shutdown_function_entry->arguments[0], 0, &function_name)) { - php_error(E_WARNING, "(Registered shutdown functions) Unable to call %s() - function does not exist", function_name); + php_error(E_WARNING, "(Registered shutdown functions) Unable to call %R() - function does not exist", Z_TYPE(function_name), Z_UNIVAL(function_name)); } else if (call_user_function(EG(function_table), NULL, shutdown_function_entry->arguments[0], &retval, @@ -2269,9 +2271,7 @@ static int user_shutdown_function_call(php_shutdown_function_entry *shutdown_fun { zval_dtor(&retval); } - if (function_name) { - efree(function_name); - } + zval_dtor(&function_name); return 0; } @@ -2363,7 +2363,7 @@ void php_free_shutdown_functions(TSRMLS_D) PHP_FUNCTION(register_shutdown_function) { php_shutdown_function_entry shutdown_function_entry; - char *function_name = NULL; + zval function_name; int i; shutdown_function_entry.arg_count = ZEND_NUM_ARGS(); @@ -2380,7 +2380,7 @@ PHP_FUNCTION(register_shutdown_function) /* Prevent entering of anything but valid callback (syntax check only!) */ if (!zend_is_callable(shutdown_function_entry.arguments[0], 1, &function_name)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid shutdown callback '%s' passed", function_name); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid shutdown callback '%R' passed", Z_TYPE(function_name), Z_UNIVAL(function_name)); efree(shutdown_function_entry.arguments); RETVAL_FALSE; } else { @@ -2394,9 +2394,7 @@ PHP_FUNCTION(register_shutdown_function) } zend_hash_next_index_insert(BG(user_shutdown_function_names), &shutdown_function_entry, sizeof(php_shutdown_function_entry), NULL); } - if (function_name) { - efree(function_name); - } + zval_dtor(&function_name); } /* }}} */ diff --git a/ext/standard/type.c b/ext/standard/type.c index c4be0c3395..161ce7f5f0 100644 --- a/ext/standard/type.c +++ b/ext/standard/type.c @@ -407,7 +407,7 @@ PHP_FUNCTION(is_scalar) PHP_FUNCTION(is_callable) { zval **var, **syntax_only, **callable_name; - char *name; + zval name; zend_bool retval; zend_bool syntax = 0; int argc=ZEND_NUM_ARGS(); @@ -424,7 +424,7 @@ PHP_FUNCTION(is_callable) if (argc > 2) { retval = zend_is_callable(*var, syntax, &name); zval_dtor(*callable_name); - ZVAL_STRING(*callable_name, name, 0); + **callable_name = name; } else { retval = zend_is_callable(*var, syntax, NULL); } |
