com php-src: Prevent op_array->this_var setting when method uses auto globals: Zend/zend_compile.c

From: 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); } }

« previous php.cvs (#86913) next »