From de53069c2ff6efbe80df2f625cfb9db6f62e5e1b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 8 Apr 2026 14:24:17 +0000 Subject: [PATCH] Address code review: handle empty file case, use EIO for tmpfile open failure Agent-Logs-Url: https://github.com/kovidgoyal/kitty/sessions/39fe0e9c-1286-442c-8d7d-7cea5905a178 Co-authored-by: kovidgoyal <1308621+kovidgoyal@users.noreply.github.com> --- kitty/dnd.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/kitty/dnd.c b/kitty/dnd.c index 7c87ee344..a7cbadf2d 100644 --- a/kitty/dnd.c +++ b/kitty/dnd.c @@ -1117,7 +1117,13 @@ drag_get_data(Window *w, const char *mime_type, size_t *sz, int *err_code) { off_t end = lseek(fd, 0, SEEK_END); if (end < 0) { *err_code = EIO; return NULL; } if (lseek(fd, 0, SEEK_SET) < 0) { *err_code = EIO; return NULL; } - char *data = malloc(end ? (size_t)end : 1); + if (end == 0) { + safe_close(fd, __FILE__, __LINE__); + ds.items[i].fd_plus_one = 0; + *err_code = 0; + return NULL; + } + char *data = malloc((size_t)end); if (!data) { *err_code = ENOMEM; return NULL; } size_t total = 0; while (total < (size_t)end) { @@ -1194,7 +1200,7 @@ drag_process_item_data(Window *w, size_t idx, int has_more, const uint8_t *paylo // Open temp file if not yet open if (!ds.items[idx].fd_plus_one) { int fd = open_item_tmpfile(); - if (fd < 0) { cancel_drag(w, ENOMEM); return; } + if (fd < 0) { cancel_drag(w, EIO); return; } ds.items[idx].fd_plus_one = fd + 1; ds.items[idx].data_decode_initialized = true; base64_init_stream_decoder(&ds.items[idx].base64_state);