From: Xinchen Hui Date: Wed, 23 Dec 2015 16:11:09 +0000 (-0800) Subject: Merge branch 'PHP-5.6' into PHP-7.0 X-Git-Tag: php-7.0.3RC1~108^2~8 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8692a995518549102f2d8f629a736e1aacc2f7b9;p=php Merge branch 'PHP-5.6' into PHP-7.0 --- 8692a995518549102f2d8f629a736e1aacc2f7b9 diff --cc ext/spl/php_spl.c index 719a9f3e48,d3228698de..ef73b9adc6 --- a/ext/spl/php_spl.c +++ b/ext/spl/php_spl.c @@@ -645,24 -654,29 +645,28 @@@ PHP_FUNCTION(spl_autoload_unregister 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 */