From 6b6901a26f5683d30e6a3192d5b3a7da1dba69c3 Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Thu, 9 Jan 2025 13:17:36 +1300 Subject: Fix off_t overflow in pg_basebackup on Windows. walmethods.c used off_t to navigate around a pg_wal.tar file that could exceed 2GB, which doesn't work on Windows and would fail with misleading errors. Use pgoff_t instead. Back-patch to all supported branches. Author: Davinder Singh Reported-by: Jakub Wartak Discussion: https://postgr.es/m/CAKZiRmyM4YnokK6Oenw5JKwAQ3rhP0YTz2T-tiw5dAQjGRXE3Q%40mail.gmail.com --- src/bin/pg_basebackup/walmethods.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/bin/pg_basebackup/walmethods.c') diff --git a/src/bin/pg_basebackup/walmethods.c b/src/bin/pg_basebackup/walmethods.c index 602727f4d43..6204ba8aba7 100644 --- a/src/bin/pg_basebackup/walmethods.c +++ b/src/bin/pg_basebackup/walmethods.c @@ -63,7 +63,7 @@ static DirectoryMethodData *dir_data = NULL; typedef struct DirectoryMethodFile { int fd; - off_t currpos; + pgoff_t currpos; char *pathname; char *fullpath; char *temp_suffix; @@ -370,7 +370,7 @@ dir_write(Walfile f, const void *buf, size_t count) return r; } -static off_t +static pgoff_t dir_get_current_pos(Walfile f) { Assert(f != NULL); @@ -666,8 +666,8 @@ FreeWalDirectoryMethod(void) typedef struct TarMethodFile { - off_t ofs_start; /* Where does the *header* for this file start */ - off_t currpos; + pgoff_t ofs_start; /* Where does the *header* for this file start */ + pgoff_t currpos; char header[TAR_BLOCK_SIZE]; char *pathname; size_t pad_to_size; @@ -1005,7 +1005,7 @@ tar_compression_algorithm(void) return tar_data->compression_algorithm; } -static off_t +static pgoff_t tar_get_current_pos(Walfile f) { Assert(f != NULL); -- cgit v1.2.3