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
pull/198/head
Thomas Munro 6 months ago
parent 026762dae3
commit 970b97eeb8
  1. 2
      src/bin/pg_basebackup/receivelog.c
  2. 2
      src/bin/pg_basebackup/walmethods.c
  3. 2
      src/bin/pg_basebackup/walmethods.h

@ -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];

@ -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;

@ -17,7 +17,7 @@ typedef struct WalWriteMethod WalWriteMethod;
typedef struct
{
WalWriteMethod *wwmethod;
off_t currpos;
pgoff_t currpos;
char *pathname;
/*

Loading…
Cancel
Save