com php-src: Prevent op_array->this_var setting when method uses auto globals: Zend/zend_compile.c
| From: | Dmitry Stogov | Date: | Mon, 25 May 2015 16:59:25 +0000 |
| Subject: | com php-src: Prevent op_array->this_var setting when method uses auto globals: Zend/zend_compile.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-86913@lists.php.net to get a copy of this message | ||
Commit: 03f41f9b4d1b068cf2fbc4090014fd8588373f85
Author: Dmitry Stogov <dmitry@zend.com> Mon, 25 May 2015 19:59:25 +0300
Parents: 18cd4b17cc66df57d7806b7b574aff0f518aabf4
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=03f41f9b4d1b068cf2fbc4090014fd8588373f85
Log:
Prevent op_array->this_var setting when method uses auto globals
Changed paths:
M Zend/zend_compile.c
Diff:
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 4721ecd..dc7d4b4 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -2164,14 +2164,6 @@ static zend_op *zend_compile_simple_var_no_cv(znode *result, zend_ast *ast,
uint
znode name_node;
zend_op *opline;
- /* there is a chance someone is accessing $this */
- if (ast->kind != ZEND_AST_ZVAL
- && CG(active_op_array)->scope && CG(active_op_array)->this_var ==
(uint32_t)-1
- ) {
- zend_string *key = zend_string_init("this", sizeof("this") - 1, 0);
- CG(active_op_array)->this_var = lookup_cv(CG(active_op_array), key);
- }
-
zend_compile_expr(&name_node, name_ast);
if (name_node.op_type == IS_CONST) {
convert_to_string(&name_node.u.constant);
@@ -2183,10 +2175,18 @@ static zend_op *zend_compile_simple_var_no_cv(znode *result, zend_ast *ast,
uint
opline = zend_emit_op(result, ZEND_FETCH_R, &name_node, NULL);
}
- opline->extended_value = ZEND_FETCH_LOCAL;
- if (name_node.op_type == IS_CONST) {
- if (zend_is_auto_global(Z_STR(name_node.u.constant))) {
- opline->extended_value = ZEND_FETCH_GLOBAL;
+ if (name_node.op_type == IS_CONST &&
+ zend_is_auto_global(Z_STR(name_node.u.constant))) {
+
+ opline->extended_value = ZEND_FETCH_GLOBAL;
+ } else {
+ opline->extended_value = ZEND_FETCH_LOCAL;
+ /* there is a chance someone is accessing $this */
+ if (ast->kind != ZEND_AST_ZVAL
+ && CG(active_op_array)->scope && CG(active_op_array)->this_var ==
(uint32_t)-1
+ ) {
+ zend_string *key = zend_string_init("this", sizeof("this") - 1, 0);
+ CG(active_op_array)->this_var = lookup_cv(CG(active_op_array), key);
}
}