]> git.ipfire.org Git - thirdparty/git.git/commitdiff
reftable: handle interrupted reads
authorPatrick Steinhardt <ps@pks.im>
Mon, 11 Dec 2023 09:07:34 +0000 (10:07 +0100)
committerJunio C Hamano <gitster@pobox.com>
Mon, 11 Dec 2023 15:23:16 +0000 (07:23 -0800)
There are calls to pread(3P) and read(3P) where we don't properly handle
interrupts. Convert them to use `pread_in_full()` and `read_in_full()`,
respectively.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
reftable/blocksource.c
reftable/stack.c

index 8331b34e82300630b68c574e4f68071f3ebf261a..a1ea3044292ef2032485bad261ffa5ed178421bc 100644 (file)
@@ -109,7 +109,7 @@ static int file_read_block(void *v, struct reftable_block *dest, uint64_t off,
        struct file_block_source *b = v;
        assert(off + size <= b->size);
        dest->data = reftable_malloc(size);
-       if (pread(b->fd, dest->data, size, off) != size)
+       if (pread_in_full(b->fd, dest->data, size, off) != size)
                return -1;
        dest->len = size;
        return size;
index ddbdf1b9c8bf4668dfe4f9b7c03cabd43effb660..ed108a929bbf467030341534cf51852a9e905282 100644 (file)
@@ -92,7 +92,7 @@ static int fd_read_lines(int fd, char ***namesp)
        }
 
        buf = reftable_malloc(size + 1);
-       if (read(fd, buf, size) != size) {
+       if (read_in_full(fd, buf, size) != size) {
                err = REFTABLE_IO_ERROR;
                goto done;
        }