diff options
| author | Dmitry Stogov <dmitry@php.net> | 2007-05-04 06:18:53 +0000 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@php.net> | 2007-05-04 06:18:53 +0000 |
| commit | d8ce0568ef745a9cc1815c8387f4f83e3339280d (patch) | |
| tree | 980f82591de1549de660307267b1ecba618da79a /Zend | |
| parent | cd32cab680679f4bd75f4f43630fc925da7d52d0 (diff) | |
| download | php-git-d8ce0568ef745a9cc1815c8387f4f83e3339280d.tar.gz | |
Fixed altering $this via argument named "this"
Diffstat (limited to 'Zend')
| -rw-r--r-- | Zend/zend_compile.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 3d4afa8f81..c660d83cf4 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -1265,9 +1265,18 @@ void zend_do_end_function_declaration(znode *function_token TSRMLS_DC) void zend_do_receive_arg(zend_uchar op, znode *var, znode *offset, znode *initialization, znode *class_type, znode *varname, zend_uchar pass_by_reference TSRMLS_DC) { - zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC); + zend_op *opline; zend_arg_info *cur_arg_info; + if (CG(active_op_array)->scope && + ((CG(active_op_array)->fn_flags & ZEND_ACC_STATIC) == 0) && + (Z_TYPE(varname->u.constant) == IS_STRING) && + (Z_STRLEN(varname->u.constant) == sizeof("this")-1) && + (memcmp(Z_STRVAL(varname->u.constant), "this", sizeof("this")) == 0)) { + zend_error(E_COMPILE_ERROR, "Cannot re-assign $this"); + } + + opline = get_next_op(CG(active_op_array) TSRMLS_CC); CG(active_op_array)->num_args++; opline->opcode = op; opline->result = *var; |
