summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2017-04-02 13:31:07 +0200
committerNikita Popov <nikita.ppv@gmail.com>2017-04-02 13:31:07 +0200
commit3a890180d3157f0564e5f4d0d15b8103dd268e25 (patch)
tree52cd65c758454478085bc4d8bae1e4b7996a5b37
parent51b06aa86e6924420e55afebdc9bb229c1b96bbb (diff)
parentfe46a7da78f037fe032f27c9b65667c675a6dd8d (diff)
downloadphp-git-3a890180d3157f0564e5f4d0d15b8103dd268e25.tar.gz
Merge branch 'PHP-7.1'
-rw-r--r--Zend/tests/bug74340.phpt30
-rw-r--r--Zend/zend_object_handlers.c2
2 files changed, 31 insertions, 1 deletions
diff --git a/Zend/tests/bug74340.phpt b/Zend/tests/bug74340.phpt
new file mode 100644
index 0000000000..f266dcc236
--- /dev/null
+++ b/Zend/tests/bug74340.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Bug #74340: Magic function __get has different behavior in php 7.1.x
+--FILE--
+<?php
+class Test
+{
+ public function __get($var)
+ {
+ static $first = true;
+ echo '__get '.$var.PHP_EOL;
+ if ($first) {
+ $first = false;
+ $this->$var;
+ $this->{$var.'2'};
+ $this->$var;
+ }
+ }
+}
+
+$test = new Test;
+$test->test;
+
+?>
+--EXPECTF--
+__get test
+
+Notice: Undefined property: Test::$test in %s on line %d
+__get test2
+
+Notice: Undefined property: Test::$test in %s on line %d
diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c
index 66de460a30..e485ad0e3d 100644
--- a/Zend/zend_object_handlers.c
+++ b/Zend/zend_object_handlers.c
@@ -533,7 +533,7 @@ ZEND_API uint32_t *zend_get_property_guard(zend_object *zobj, zend_string *membe
ALLOC_HASHTABLE(guards);
zend_hash_init(guards, 8, NULL, zend_property_guard_dtor, 0);
/* mark pointer as "special" using low bit */
- zend_hash_add_new_ptr(guards, member,
+ zend_hash_add_new_ptr(guards, str,
(void*)(((zend_uintptr_t)&zv->u2.property_guard) | 1));
zend_string_release(Z_STR_P(zv));
ZVAL_ARR(zv, guards);