Skip to content

Commit 2943c04

Browse files
committed
On Windows, make pg_dump use binary mode for compressed plain text output.
The combination of -Z -Fp and output to stdout resulted in corrupted output data, because we left stdout in text mode, resulting in newline conversion being done on the compressed stream. Switch stdout to binary mode for this case, at the same place where we do it for non-text output formats. Report and patch by Kuntal Ghosh, tested by Ashutosh Sharma and Neha Sharma. Back-patch to all supported branches. Discussion: https://postgr.es/m/CAGz5QCJPvbBjXAmJuGx1B_41yVCetAJhp7rtaDf7XQGWuB1GSw@mail.gmail.com
1 parent b47e2f7 commit 2943c04

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

src/bin/pg_dump/pg_backup_archiver.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2092,12 +2092,12 @@ _allocAH(const char *FileSpec, const ArchiveFormat fmt,
20922092
AH->OF = stdout;
20932093

20942094
/*
2095-
* On Windows, we need to use binary mode to read/write non-text archive
2096-
* formats. Force stdin/stdout into binary mode if that is what we are
2097-
* using.
2095+
* On Windows, we need to use binary mode to read/write non-text files,
2096+
* which include all archive formats as well as compressed plain text.
2097+
* Force stdin/stdout into binary mode if that is what we are using.
20982098
*/
20992099
#ifdef WIN32
2100-
if (fmt != archNull &&
2100+
if ((fmt != archNull || compression != 0) &&
21012101
(AH->fSpec == NULL || strcmp(AH->fSpec, "") == 0))
21022102
{
21032103
if (mode == archModeWrite)

0 commit comments

Comments
 (0)