Also check for exception after stream_eof
authorNikita Popov <nikita.ppv@gmail.com>
Thu, 10 Oct 2019 10:07:47 +0000 (12:07 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Thu, 10 Oct 2019 10:08:04 +0000 (12:08 +0200)
main/streams/userspace.c

index af7f0b4fa281a26825c720d29680ef2d2598dfcc..91fd83954c11dae4e6ab0efa7e3468ab809e8382 100644 (file)
@@ -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;
 }