summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelipe Pena <felipe@php.net>2008-10-26 13:48:16 +0000
committerFelipe Pena <felipe@php.net>2008-10-26 13:48:16 +0000
commitd1eb03eec77c65b484ae0ccebf40ad6df7773cdf (patch)
tree13c578240bd02265b1a8999299c745382aa99266
parent21490362dda6a60d6818b4bf871b3f3ed4c6c4e8 (diff)
downloadphp-git-d1eb03eec77c65b484ae0ccebf40ad6df7773cdf.tar.gz
- MFH: Fixed bug #46388 (stream_notification_callback inside of object destroys object variables)
-rw-r--r--NEWS2
-rw-r--r--ext/standard/streamsfuncs.c6
2 files changed, 7 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index c85e177a82..53327733b0 100644
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,8 @@ PHP NEWS
?? Nov 2008, PHP 5.2.7RC3
- Fixed bug #46389 (NetWare needs small patch for _timezone).
(patch by guenter@php.net)
+- Fixed bug #46388 (stream_notification_callback inside of object destroys
+ object variables). (Felipe)
- Fixed bug #46381 (wrong $this passed to internal methods causes segfault).
(Tony)
- Fixed bug #46082 (stream_set_blocking() can cause a crash in some
diff --git a/ext/standard/streamsfuncs.c b/ext/standard/streamsfuncs.c
index 7dade984ac..73a993b4d2 100644
--- a/ext/standard/streamsfuncs.c
+++ b/ext/standard/streamsfuncs.c
@@ -819,12 +819,13 @@ static void user_space_stream_notifier(php_stream_context *context, int notifyco
INIT_ZVAL(zvs[i]);
ps[i] = &zvs[i];
ptps[i] = &ps[i];
+ MAKE_STD_ZVAL(ps[i]);
}
ZVAL_LONG(ps[0], notifycode);
ZVAL_LONG(ps[1], severity);
if (xmsg) {
- ZVAL_STRING(ps[2], xmsg, 0);
+ ZVAL_STRING(ps[2], xmsg, 1);
} else {
ZVAL_NULL(ps[2]);
}
@@ -835,6 +836,9 @@ static void user_space_stream_notifier(php_stream_context *context, int notifyco
if (FAILURE == call_user_function_ex(EG(function_table), NULL, callback, &retval, 6, ptps, 0, NULL TSRMLS_CC)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed to call user notifier");
}
+ for (i = 0; i < 6; i++) {
+ zval_ptr_dtor(&ps[i]);
+ }
if (retval) {
zval_ptr_dtor(&retval);
}