Fix off_t overflow in pg_basebackup on Windows.
authorThomas Munro <[email protected]>
Thu, 9 Jan 2025 00:17:36 +0000 (13:17 +1300)
committerThomas Munro <[email protected]>
Thu, 9 Jan 2025 03:04:23 +0000 (16:04 +1300)
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 <[email protected]>
Reported-by: Jakub Wartak <[email protected]>
Discussion: https://postgr.es/m/CAKZiRmyM4YnokK6Oenw5JKwAQ3rhP0YTz2T-tiw5dAQjGRXE3Q%40mail.gmail.com

src/bin/pg_basebackup/receivelog.c
src/bin/pg_basebackup/walmethods.c
src/bin/pg_basebackup/walmethods.h

index 7f22439ea6c7bc2cab92b14ae5d409e88f931b90..f7ba79188c1ae7595619cd30b33e58cb4c60905b 100644 (file)
@@ -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];
 
index 5329c83a2b7dd925674896ae5a704b950216830f..eaaabc5f3745a5f1591261e46b145a8fae28ad51 100644 (file)
@@ -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;
index 77eb0f08f3e464894ef324106ab8dc48d8de21a1..f7a6dc18439ff9e4a02c5abcab4d45a0e080e695 100644 (file)
@@ -17,7 +17,7 @@ typedef struct WalWriteMethod WalWriteMethod;
 typedef struct
 {
        WalWriteMethod *wwmethod;
-       off_t           currpos;
+       pgoff_t         currpos;
        char       *pathname;
 
        /*