From 4c0bb6d76eb0c8b9fdc74c3c8858a146ab34e2f8 Mon Sep 17 00:00:00 2001 From: bwoebi Date: Wed, 16 Oct 2013 16:04:23 +0200 Subject: Fixed bug #65911 ($this not usable as static property) In context of static accesses like classname::$this, the string "$this" should not be handled like a $this variable, but as an identifier for a static variable. --- NEWS | 4 ++++ Zend/tests/bug65911.phpt | 20 ++++++++++++++++++++ Zend/zend_compile.c | 1 + 3 files changed, 25 insertions(+) create mode 100644 Zend/tests/bug65911.phpt diff --git a/NEWS b/NEWS index fcf34c3fb9..6c2c6ed13b 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,10 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? 2013, PHP 5.4.22 +- Core: + . Fixed bug #65911 (scope resolution operator - strange behavior with $this). + (Bob Weinand) + - CLI server: . Fixed bug #65818 (Segfault with built-in webserver and chunked transfer encoding). (Felipe) diff --git a/Zend/tests/bug65911.phpt b/Zend/tests/bug65911.phpt new file mode 100644 index 0000000000..b9f37b7bd6 --- /dev/null +++ b/Zend/tests/bug65911.phpt @@ -0,0 +1,20 @@ +--TEST-- +Bug #65911 (scope resolution operator - strange behavior with $this) +--FILE-- +foo = 'bar'; + echo A::$this->foo; // should not output 'bar' + } +} + +$obj = new B(); +$obj->go(); +?> +--EXPECTF-- +Fatal error: Access to undeclared static property: A::$this in %s on line %d diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 326d4ef976..10390b04a8 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -905,6 +905,7 @@ static zend_bool opline_is_fetch_this(const zend_op *opline TSRMLS_DC) /* {{{ */ { if ((opline->opcode == ZEND_FETCH_W) && (opline->op1_type == IS_CONST) && (Z_TYPE(CONSTANT(opline->op1.constant)) == IS_STRING) + && ((opline->extended_value & ZEND_FETCH_STATIC_MEMBER) != ZEND_FETCH_STATIC_MEMBER) && (Z_HASH_P(&CONSTANT(opline->op1.constant)) == THIS_HASHVAL) && (Z_STRLEN(CONSTANT(opline->op1.constant)) == (sizeof("this")-1)) && !memcmp(Z_STRVAL(CONSTANT(opline->op1.constant)), "this", sizeof("this"))) { -- cgit v1.2.1