summaryrefslogtreecommitdiff
path: root/execute.c
diff options
context:
space:
mode:
authorStefan2010-03-24 14:12:00 +0100
committerStefan2010-03-24 14:12:00 +0100
commit4dded6dd78e17976574fed36187f15a7e75e6c5f (patch)
tree1cd8f923cf16894235c0c3ee8b48c307180cf976 /execute.c
parent123e88789441ac5e1c8edeadcfb5c495d2b8f409 (diff)
Fixed error case handling in function_exists() PHP 5.3
Diffstat (limited to 'execute.c')
-rw-r--r--execute.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/execute.c b/execute.c
index 9b390b6..304e08a 100644
--- a/execute.c
+++ b/execute.c
@@ -1067,19 +1067,34 @@ static int ih_phpinfo(IH_HANDLER_PARAMS)
1067 1067
1068static int ih_function_exists(IH_HANDLER_PARAMS) 1068static int ih_function_exists(IH_HANDLER_PARAMS)
1069{ 1069{
1070#ifndef PHP_ATLEAST_5_3
1070 zval **function_name; 1071 zval **function_name;
1072#endif
1071 zend_function *func; 1073 zend_function *func;
1072 char *lcname; 1074 char *lcname;
1073 zend_bool retval; 1075 zend_bool retval;
1074 int func_name_len; 1076 int func_name_len;
1075 1077
1078#ifndef PHP_ATLEAST_5_3
1076 if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &function_name)==FAILURE) { 1079 if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &function_name)==FAILURE) {
1077 ZEND_WRONG_PARAM_COUNT(); 1080 ZEND_WRONG_PARAM_COUNT_WITH_RETVAL(1);
1078 } 1081 }
1079 convert_to_string_ex(function_name); 1082 convert_to_string_ex(function_name);
1080 func_name_len = Z_STRLEN_PP(function_name); 1083 func_name_len = Z_STRLEN_PP(function_name);
1081 lcname = estrndup(Z_STRVAL_PP(function_name), func_name_len); 1084 lcname = estrndup(Z_STRVAL_PP(function_name), func_name_len);
1082 zend_str_tolower(lcname, func_name_len); 1085 zend_str_tolower(lcname, func_name_len);
1086#else
1087 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &lcname, &func_name_len) == FAILURE) {
1088 return;
1089 }
1090
1091 /* Ignore leading "\" */
1092 if (lcname[0] == '\\') {
1093 lcname = &lcname[1];
1094 func_name_len--;
1095 }
1096 lcname = zend_str_tolower_dup(lcname, func_name_len);
1097#endif
1083 1098
1084 retval = (zend_hash_find(EG(function_table), lcname, func_name_len+1, (void **)&func) == SUCCESS); 1099 retval = (zend_hash_find(EG(function_table), lcname, func_name_len+1, (void **)&func) == SUCCESS);
1085 1100