From 83ced9124ea0f7be4950b8267b518b05c70323fe Mon Sep 17 00:00:00 2001 From: Stanislav Malyshev Date: Sun, 21 Jul 2013 22:47:10 -0700 Subject: [PATCH] Fix bug #61697 - spl_autoload_functions returns lambda functions incorrectly --- NEWS | 2 ++ UPGRADING | 3 +++ ext/spl/php_spl.c | 13 +++++++++++-- ext/spl/tests/bug61697.phpt | 2 -- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 540daf24d0..18bb2fd013 100644 --- a/NEWS +++ b/NEWS @@ -13,6 +13,8 @@ PHP NEWS - SPL: . Added RecursiveTreeIterator setPostfix and getPostifx methods. (Joshua Thijssen) + . Fixed bug #61697 (spl_autoload_functions returns lambda functions + incorrectly). (Laruence) - Streams: . Fixed bug #65268 (select() implementation uses outdated tick API). (Anatol) diff --git a/UPGRADING b/UPGRADING index 741bcd9683..14e19aa583 100755 --- a/UPGRADING +++ b/UPGRADING @@ -179,6 +179,9 @@ PHP 5.5 UPGRADE NOTES - Functions in the socket extension now do not emit warnings when the errno is EAGAIN, EWOULDBLOCK or EINPROGRESS. +- Since 5.5.2, spl_autoload_functions() returns different names for + different lambda functions registered via spl_autoload_register(). + ======================================== 5. New Functions ======================================== diff --git a/ext/spl/php_spl.c b/ext/spl/php_spl.c index 35f4e5056b..c3a774ea96 100644 --- a/ext/spl/php_spl.c +++ b/ext/spl/php_spl.c @@ -743,8 +743,17 @@ PHP_FUNCTION(spl_autoload_functions) } add_next_index_string(tmp, alfi->func_ptr->common.function_name, 1); add_next_index_zval(return_value, tmp); - } else - add_next_index_string(return_value, alfi->func_ptr->common.function_name, 1); + } else { + if (strncmp(alfi->func_ptr->common.function_name, ZEND_STRL("__lambda_func"))) { + add_next_index_string(return_value, alfi->func_ptr->common.function_name, 1); + } else { + char *key; + uint len; + long dummy; + zend_hash_get_current_key_ex(SPL_G(autoload_functions), &key, &len, &dummy, 0, &function_pos); + add_next_index_stringl(return_value, key, len - 1, 1); + } + } zend_hash_move_forward_ex(SPL_G(autoload_functions), &function_pos); } diff --git a/ext/spl/tests/bug61697.phpt b/ext/spl/tests/bug61697.phpt index d95caef978..064aaa2e2b 100644 --- a/ext/spl/tests/bug61697.phpt +++ b/ext/spl/tests/bug61697.phpt @@ -1,7 +1,5 @@ --TEST-- Bug #61697 (spl_autoload_functions returns lambda functions incorrectly) ---XFAIL-- -Bug #61697 not fixed yet --FILE--