summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelipe Pena <felipe@php.net>2009-11-11 18:59:37 +0000
committerFelipe Pena <felipe@php.net>2009-11-11 18:59:37 +0000
commitfc9c17690de92fe9b1ad820f8293b71c01009f57 (patch)
treeeaa53c1bde0d6cf0d6ea6642416c8e892041253e
parente6770f10a046679b9545de43c691fcfce7e67f67 (diff)
downloadphp-git-fc9c17690de92fe9b1ad820f8293b71c01009f57.tar.gz
- Fixed bug #50146 (property_exists: Closure object cannot have properties)
-rw-r--r--Zend/tests/bug50146.phpt20
-rw-r--r--Zend/zend_closures.c4
2 files changed, 23 insertions, 1 deletions
diff --git a/Zend/tests/bug50146.phpt b/Zend/tests/bug50146.phpt
new file mode 100644
index 0000000000..7aa26a6509
--- /dev/null
+++ b/Zend/tests/bug50146.phpt
@@ -0,0 +1,20 @@
+--TEST--
+Bug #50146 (property_exists: Closure object cannot have properties)
+--FILE--
+<?php
+
+$obj = function(){};
+
+var_dump(property_exists($obj,'foo'));
+
+$ref = new ReflectionObject($obj);
+var_dump($ref->hasProperty('b'));
+
+var_dump(isset($obj->a));
+
+?>
+--EXPECTF--
+bool(false)
+bool(false)
+
+Catchable fatal error: Closure object cannot have properties in %s on line %d
diff --git a/Zend/zend_closures.c b/Zend/zend_closures.c
index 84425ba99d..6caca0f5f8 100644
--- a/Zend/zend_closures.c
+++ b/Zend/zend_closures.c
@@ -161,7 +161,9 @@ static zval **zend_closure_get_property_ptr_ptr(zval *object, zval *member TSRML
static int zend_closure_has_property(zval *object, zval *member, int has_set_exists TSRMLS_DC) /* {{{ */
{
- ZEND_CLOSURE_PROPERTY_ERROR();
+ if (has_set_exists != 2) {
+ ZEND_CLOSURE_PROPERTY_ERROR();
+ }
return 0;
}
/* }}} */