summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2008-09-17 13:08:54 +0000
committerDmitry Stogov <dmitry@php.net>2008-09-17 13:08:54 +0000
commitdf9b7a1fe063214f48dffbd583248da8df95228e (patch)
tree9ca9565d6a6e876b19730aed3698bb9ba6674825
parentfcc0fdd125fdb9e1713f91d027fe07d680a0cf36 (diff)
downloadphp-git-df9b7a1fe063214f48dffbd583248da8df95228e.tar.gz
Fixed possible crash because of overriden error handler
-rw-r--r--Zend/tests/closure_031.phpt16
-rw-r--r--Zend/zend_closures.c3
2 files changed, 18 insertions, 1 deletions
diff --git a/Zend/tests/closure_031.phpt b/Zend/tests/closure_031.phpt
new file mode 100644
index 0000000000..dace4a4e73
--- /dev/null
+++ b/Zend/tests/closure_031.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Closure 031: Closure properties with custom error handlers
+--FILE--
+<?php
+function foo($errno, $errstr, $errfile, $errline) {
+ echo "Error: $errstr\n";
+}
+set_error_handler('foo');
+$foo = function() {
+};
+var_dump($foo->a);
+?>
+--EXPECT--
+Error: Closure object cannot have properties
+NULL
+
diff --git a/Zend/zend_closures.c b/Zend/zend_closures.c
index f0fba8e174..69b964aba9 100644
--- a/Zend/zend_closures.c
+++ b/Zend/zend_closures.c
@@ -136,7 +136,8 @@ static zend_function *zend_closure_get_method(zval **object_ptr, char *method_na
static zval *zend_closure_read_property(zval *object, zval *member, int type TSRMLS_DC) /* {{{ */
{
ZEND_CLOSURE_PROPERTY_ERROR();
- return NULL;
+ Z_ADDREF(EG(uninitialized_zval));
+ return &EG(uninitialized_zval);
}
/* }}} */