diff options
| author | Stefan | 2010-03-24 14:12:00 +0100 |
|---|---|---|
| committer | Stefan | 2010-03-24 14:12:00 +0100 |
| commit | 4dded6dd78e17976574fed36187f15a7e75e6c5f (patch) | |
| tree | 1cd8f923cf16894235c0c3ee8b48c307180cf976 /execute.c | |
| parent | 123e88789441ac5e1c8edeadcfb5c495d2b8f409 (diff) | |
Fixed error case handling in function_exists() PHP 5.3
Diffstat (limited to 'execute.c')
| -rw-r--r-- | execute.c | 19 |
1 files changed, 17 insertions, 2 deletions
| @@ -1067,19 +1067,34 @@ static int ih_phpinfo(IH_HANDLER_PARAMS) | |||
| 1067 | 1067 | ||
| 1068 | static int ih_function_exists(IH_HANDLER_PARAMS) | 1068 | static 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 | ||
