mirror of
https://github.com/postgres/postgres.git
synced 2025-06-29 10:41:53 +03:00
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
This commit is contained in:
@ -191,7 +191,7 @@ static bool
|
||||
close_walfile(StreamCtl *stream, XLogRecPtr pos)
|
||||
{
|
||||
char *fn;
|
||||
off_t currpos;
|
||||
pgoff_t currpos;
|
||||
int r;
|
||||
|
||||
if (walfile == NULL)
|
||||
|
@ -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);
|
||||
|
@ -69,7 +69,7 @@ struct WalWriteMethod
|
||||
ssize_t (*write) (Walfile f, const void *buf, size_t count);
|
||||
|
||||
/* Return the current position in a file or -1 on error */
|
||||
off_t (*get_current_pos) (Walfile f);
|
||||
pgoff_t (*get_current_pos) (Walfile f);
|
||||
|
||||
/*
|
||||
* fsync the contents of the specified file. Returns 0 on success.
|
||||
|
Reference in New Issue
Block a user