summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-10-10 12:07:47 +0200
committerNikita Popov <nikita.ppv@gmail.com>2019-10-10 12:08:04 +0200
commitf43f493e09b28d8d3924fbcea2392108ca7f5f65 (patch)
tree10cd7f11e6169c001fb28f362dce2bb4bb036868
parentb02cf8b66eadbff1ca4ea385f9719d944a9a158a (diff)
downloadphp-git-f43f493e09b28d8d3924fbcea2392108ca7f5f65.tar.gz
Also check for exception after stream_eof
-rw-r--r--main/streams/userspace.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/main/streams/userspace.c b/main/streams/userspace.c
index af7f0b4fa2..91fd83954c 100644
--- a/main/streams/userspace.c
+++ b/main/streams/userspace.c
@@ -700,12 +700,17 @@ static ssize_t php_userstreamop_read(php_stream *stream, char *buf, size_t count
/* since the user stream has no way of setting the eof flag directly, we need to ask it if we hit eof */
ZVAL_STRINGL(&func_name, USERSTREAM_EOF, sizeof(USERSTREAM_EOF)-1);
-
call_result = call_user_function(NULL,
Z_ISUNDEF(us->object)? NULL : &us->object,
&func_name,
&retval,
0, NULL);
+ zval_ptr_dtor(&func_name);
+
+ if (EG(exception)) {
+ stream->eof = 1;
+ return -1;
+ }
if (call_result == SUCCESS && Z_TYPE(retval) != IS_UNDEF && zval_is_true(&retval)) {
stream->eof = 1;
@@ -718,7 +723,6 @@ static ssize_t php_userstreamop_read(php_stream *stream, char *buf, size_t count
}
zval_ptr_dtor(&retval);
- zval_ptr_dtor(&func_name);
return didread;
}