summaryrefslogtreecommitdiff
path: root/ext/standard
diff options
context:
space:
mode:
Diffstat (limited to 'ext/standard')
-rw-r--r--ext/standard/array.c96
-rw-r--r--ext/standard/basic_functions.c42
-rw-r--r--ext/standard/type.c4
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);
}