From d9187596c91815d98c9ce895e9056ef83d8a7a33 Mon Sep 17 00:00:00 2001 From: Scott MacVicar Date: Fri, 10 Dec 2010 06:34:03 +0000 Subject: [PATCH] MFH: Fix indirect reference of $this --- NEWS | 3 +++ Zend/tests/indirect_reference_this.phpt | 13 +++++++++++++ Zend/zend_compile.c | 4 ++++ 3 files changed, 20 insertions(+) create mode 100644 Zend/tests/indirect_reference_this.phpt diff --git a/NEWS b/NEWS index 1073939d73..5eb9102636 100644 --- a/NEWS +++ b/NEWS @@ -8,6 +8,9 @@ - PDO Oracle driver: . Fixed bug #39199 (Cannot load Lob data with more than 4000 bytes on ORACLE 10). (spatar at mail dot nnov dot ru) + +- Indirect reference to $this fails to resolve if direct $this is never used + in method. (Scott) 09 Dec 2010, PHP 5.3.4 - Upgraded bundled Sqlite3 to version 3.7.3. (Ilia) diff --git a/Zend/tests/indirect_reference_this.phpt b/Zend/tests/indirect_reference_this.phpt new file mode 100644 index 0000000000..05419d6c3d --- /dev/null +++ b/Zend/tests/indirect_reference_this.phpt @@ -0,0 +1,13 @@ +--TEST-- +Indirect referenced $this +--FILE-- +f("this"); +?> +--EXPECTF-- +object(X)#%d (0) { +} \ No newline at end of file diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 799b77410b..c0150d4c69 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -4351,6 +4351,10 @@ void zend_do_indirect_references(znode *result, const znode *num_references, zno } zend_do_begin_variable_parse(TSRMLS_C); fetch_simple_variable(result, variable, 1 TSRMLS_CC); + /* there is a chance someone is accessing $this */ + if (CG(active_op_array)->scope && CG(active_op_array)->this_var == -1) { + CG(active_op_array)->this_var = lookup_cv(CG(active_op_array), estrndup("this", sizeof("this")-1), sizeof("this")-1 TSRMLS_CC); + } } /* }}} */ -- 2.40.0