efree(error);
}
- lc_name = safe_emalloc(func_name_len, 1, sizeof(long) + 1);
- zend_str_tolower_copy(lc_name, func_name, func_name_len);
- efree(func_name);
-
if (Z_TYPE_P(zcallable) == IS_OBJECT) {
- lc_name = erealloc(lc_name, func_name_len + 2 + sizeof(zend_object_handle));
- memcpy(lc_name + func_name_len, &Z_OBJ_HANDLE_P(zcallable),
- sizeof(zend_object_handle));
- func_name_len += sizeof(zend_object_handle);
- lc_name[func_name_len] = '\0';
+ lc_name = zend_string_alloc(ZSTR_LEN(func_name) + sizeof(uint32_t), 0);
+ zend_str_tolower_copy(ZSTR_VAL(lc_name), ZSTR_VAL(func_name), ZSTR_LEN(func_name));
+ memcpy(ZSTR_VAL(lc_name) + ZSTR_LEN(func_name), &Z_OBJ_HANDLE_P(zcallable), sizeof(uint32_t));
+ ZSTR_VAL(lc_name)[ZSTR_LEN(lc_name)] = '\0';
+ } else {
+ lc_name = zend_string_alloc(ZSTR_LEN(func_name), 0);
+ zend_str_tolower_copy(ZSTR_VAL(lc_name), ZSTR_VAL(func_name), ZSTR_LEN(func_name));
}
+ zend_string_release(func_name);
if (SPL_G(autoload_functions)) {
- if (func_name_len == sizeof("spl_autoload_call")-1 && !strcmp(lc_name, "spl_autoload_call")) {
+ if (ZSTR_LEN(lc_name) == sizeof("spl_autoload_call") - 1 && !strcmp(ZSTR_VAL(lc_name), "spl_autoload_call")) {
/* remove all */
- zend_hash_destroy(SPL_G(autoload_functions));
- FREE_HASHTABLE(SPL_G(autoload_functions));
- SPL_G(autoload_functions) = NULL;
- EG(autoload_func) = NULL;
+ if (!SPL_G(autoload_running)) {
+ zend_hash_destroy(SPL_G(autoload_functions));
+ FREE_HASHTABLE(SPL_G(autoload_functions));
+ SPL_G(autoload_functions) = NULL;
+ EG(autoload_func) = NULL;
+ } else {
+ zend_hash_clean(SPL_G(autoload_functions));
+ }
success = SUCCESS;
} else {
/* remove specific */