From 970b97eeb8f036e534abe183fd41604671f7674d Mon Sep 17 00:00:00 2001
From: Thomas Munro <tmunro@postgresql.org>
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 <davinder.singh@enterprisedb.com>
Reported-by: Jakub Wartak <jakub.wartak@enterprisedb.com>
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 7f22439ea6..f7ba79188c 100644
--- a/src/bin/pg_basebackup/receivelog.c
+++ b/src/bin/pg_basebackup/receivelog.c
@@ -191,7 +191,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 5329c83a2b..eaaabc5f37 100644
--- a/src/bin/pg_basebackup/walmethods.c
+++ b/src/bin/pg_basebackup/walmethods.c
@@ -691,7 +691,7 @@ static 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 77eb0f08f3..f7a6dc1843 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;
 
 	/*
-- 
2.39.5

