From f081d6a421e12a29080c3d5bb19a7d7df1d358ad Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 24 Nov 2021 16:37:27 +0530 Subject: [PATCH] Fix #4270 --- kitty/disk-cache.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/kitty/disk-cache.c b/kitty/disk-cache.c index 41268249c..954229acb 100644 --- a/kitty/disk-cache.c +++ b/kitty/disk-cache.c @@ -117,6 +117,7 @@ static bool copy_between_files(int infd, int outfd, off_t in_pos, size_t len, uint8_t *buf, size_t bufsz) { #ifdef HAS_SENDFILE (void)buf; (void)bufsz; + unsigned num_of_consecutive_zero_returns = 128; while (len) { off_t r = in_pos; ssize_t n = sendfile(outfd, infd, &r, len); @@ -124,6 +125,12 @@ copy_between_files(int infd, int outfd, off_t in_pos, size_t len, uint8_t *buf, if (errno != EAGAIN) return false; continue; } + if (n == 0) { + // happens if input file is truncated + if (!--num_of_consecutive_zero_returns) return false; + continue; + }; + num_of_consecutive_zero_returns = 128; in_pos += n; len -= n; } #else