From 742efe989f38a02b096d4f3d9ff4e8b593d3b05e Mon Sep 17 00:00:00 2001 From: nicm Date: Sun, 17 May 2026 10:54:01 +0000 Subject: [PATCH] Report file open errors more sensibly, reported by Meriel Luna Mittelbach in GitHub issue 5081. --- file.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/file.c b/file.c index f13eb862..38a692e0 100644 --- a/file.c +++ b/file.c @@ -402,6 +402,10 @@ file_read(struct client *c, const char *path, client_file_cb cb, void *cbdata) } for (;;) { size = fread(buffer, 1, sizeof buffer, f); + if (ferror(f)) { + cf->error = errno; + goto done; + } if (evbuffer_add(cf->buffer, buffer, size) != 0) { cf->error = ENOMEM; goto done; @@ -674,7 +678,7 @@ file_write_close(struct client_files *files, struct imsg *imsg) /* Client file read error callback. */ static void -file_read_error_callback(__unused struct bufferevent *bev, __unused short what, +file_read_error_callback(__unused struct bufferevent *bev, short what, void *arg) { struct client_file *cf = arg; @@ -683,7 +687,7 @@ file_read_error_callback(__unused struct bufferevent *bev, __unused short what, log_debug("read error file %d", cf->stream); msg.stream = cf->stream; - msg.error = 0; + msg.error = (what & EVBUFFER_ERROR) ? EIO : 0; proc_send(cf->peer, MSG_READ_DONE, -1, &msg, sizeof msg); bufferevent_free(cf->event);