From be7489662e7759de7a8338d3e65cd6a22dfa4976 Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Thu, 9 Jan 2025 13:17:36 +1300 Subject: [PATCH] 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/receivelog.c | 2 +- src/bin/pg_basebackup/walmethods.c | 2 +- src/bin/pg_basebackup/walmethods.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/bin/pg_basebackup/receivelog.c b/src/bin/pg_basebackup/receivelog.c index 504d82bef67..e69ad912a25 100644 --- a/src/bin/pg_basebackup/receivelog.c +++ b/src/bin/pg_basebackup/receivelog.c @@ -192,7 +192,7 @@ static bool close_walfile(StreamCtl *stream, XLogRecPtr pos) { char *fn; - off_t currpos; + pgoff_t currpos; int r; char walfile_name[MAXPGPATH]; diff --git a/src/bin/pg_basebackup/walmethods.c b/src/bin/pg_basebackup/walmethods.c index 376ddf72b71..f21883d30d6 100644 --- a/src/bin/pg_basebackup/walmethods.c +++ b/src/bin/pg_basebackup/walmethods.c @@ -686,7 +686,7 @@ const WalWriteMethodOps WalTarMethodOps = { typedef struct TarMethodFile { Walfile base; - off_t ofs_start; /* Where does the *header* for this file start */ + pgoff_t ofs_start; /* Where does the *header* for this file start */ char header[TAR_BLOCK_SIZE]; size_t pad_to_size; } TarMethodFile; diff --git a/src/bin/pg_basebackup/walmethods.h b/src/bin/pg_basebackup/walmethods.h index 54a22fe6070..1ebdd360e64 100644 --- a/src/bin/pg_basebackup/walmethods.h +++ b/src/bin/pg_basebackup/walmethods.h @@ -17,7 +17,7 @@ typedef struct WalWriteMethod WalWriteMethod; typedef struct { WalWriteMethod *wwmethod; - off_t currpos; + pgoff_t currpos; char *pathname; /*