mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Implemented RFC: Fix inconsistent behavior of $this variable
Squashed commit of the following: commitbdd3b6895c
Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jun 16 00:19:42 2016 +0300 Fixed GOTO VM commit2f1d7c8b89
Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jun 15 21:01:57 2016 +0300 Removed unused variable commitcf749c42b0
Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jun 15 19:06:16 2016 +0300 Protection from $this reassign through mb_parse_str() commit59a9a6c83c
Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jun 15 18:14:50 2016 +0300 Added type inference rule for FETCH_THIS opcode commit73f8d14a85
Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jun 15 18:11:18 2016 +0300 Restored PHP-7 behavior of isset($this->foo). It throws exception if not in object context. Removed useless opcode handlers. commitfa0881381e
Author: Dmitry Stogov <dmitry@zend.com> Date: Tue May 31 12:25:47 2016 +0300 Changed "Notice: Undefined variable: this" into "Exception: Using $this when not in object context". commite32cc528c0
Author: Dmitry Stogov <dmitry@zend.com> Date: Tue May 24 02:02:43 2016 +0300 Throw exception on attempt to re-assign $this through extract() and parse_str(). commit41f1531b52
Author: Dmitry Stogov <dmitry@zend.com> Date: Mon May 23 22:18:36 2016 +0300 Fixed inconsistent $this behavior
This commit is contained in:
parent
fba6f90ae3
commit
a9512af810
38 changed files with 1511 additions and 3576 deletions
|
@ -109,6 +109,25 @@ PHPAPI void php_register_variable_ex(char *var_name, zval *val, zval *track_vars
|
|||
return;
|
||||
}
|
||||
|
||||
if (var_len == sizeof("this")-1 && EG(current_execute_data)) {
|
||||
zend_execute_data *ex = EG(current_execute_data);
|
||||
|
||||
while (ex) {
|
||||
if (ex->func && ZEND_USER_CODE(ex->func->common.type)) {
|
||||
if (ex->symbol_table == symtable1) {
|
||||
if (memcmp(var, "this", sizeof("this")-1) == 0) {
|
||||
zend_throw_error(NULL, "Cannot re-assign $this");
|
||||
zval_dtor(val);
|
||||
free_alloca(var_orig, use_heap);
|
||||
return;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
ex = ex->prev_execute_data;
|
||||
}
|
||||
}
|
||||
|
||||
/* GLOBALS hijack attempt, reject parameter */
|
||||
if (symtable1 == &EG(symbol_table) &&
|
||||
var_len == sizeof("GLOBALS")-1 &&
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue