com php-src: Fix __invoke comparison in closure_get _method: Zend/tests/closure_invoke_case_insensitive .phpt Zend/zend_closures.c
| From: | Nikita Popov | Date: | Wed, 30 Mar 2016 16:32:00 +0000 |
| Subject: | com php-src: Fix __invoke comparison in closure_get _method: Zend/tests/closure_invoke_case_insensitive .phpt Zend/zend_closures.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-91553@lists.php.net to get a copy of this message | ||
Commit: f95679885ff9a7258f0a91b9d83d73a7ee7e6f91
Author: Nikita Popov <nikic@php.net> Wed, 30 Mar 2016 18:31:10 +0200
Parents: 3bfe1c55ae72f6f2c1cccc641e46f26114376ecd
Branches: PHP-7.0 master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=f95679885ff9a7258f0a91b9d83d73a7ee7e6f91
Log:
Fix __invoke comparison in closure_get_method
It compared against the wrong variable. Fixed this by getting rid
of lc_name entirely and use equals_literal_ci instead.
Changed paths:
A Zend/tests/closure_invoke_case_insensitive.phpt
M Zend/zend_closures.c
Diff:
diff --git a/Zend/tests/closure_invoke_case_insensitive.phpt
b/Zend/tests/closure_invoke_case_insensitive.phpt
new file mode 100644
index 0000000..d41d58a
--- /dev/null
+++ b/Zend/tests/closure_invoke_case_insensitive.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Closure::__invoke() is case insensitive
+--FILE--
+<?php
+
+$inc = function(&$n) {
+ $n++;
+};
+
+$n = 1;
+$inc->__INVOKE($n);
+var_dump($n);
+
+?>
+--EXPECT--
+int(2)
diff --git a/Zend/zend_closures.c b/Zend/zend_closures.c
index 9b4fb11..def114c4 100644
--- a/Zend/zend_closures.c
+++ b/Zend/zend_closures.c
@@ -297,14 +297,10 @@ ZEND_API zval* zend_get_closure_this_ptr(zval *obj) /* {{{ */
static zend_function *zend_closure_get_method(zend_object **object, zend_string *method, const zval
*key) /* {{{ */
{
- zend_string *lc_name;
-
- lc_name = zend_string_tolower(method);
- if (zend_string_equals_literal(method, ZEND_INVOKE_FUNC_NAME)) {
- zend_string_release(lc_name);
+ if (zend_string_equals_literal_ci(method, ZEND_INVOKE_FUNC_NAME)) {
return zend_get_closure_invoke_method(*object);
}
- zend_string_release(lc_name);
+
return std_object_handlers.get_method(object, method, key);
}
/* }}} */