summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2017-06-19 11:02:45 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2017-06-19 11:03:07 -0400
commit4fc274dd8c1d9b5a3ae7196b726c082a39a66384 (patch)
tree5f8a285b70663f9656ab0f17602d5127c31e14c7 /src
parent1ba1adf772e60e9dde0e5b21b71f89609b10464c (diff)
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
Diffstat (limited to 'src')
-rw-r--r--src/bin/pg_dump/pg_backup_archiver.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c
index 302882a5f7c..78e243c12c0 100644
--- a/src/bin/pg_dump/pg_backup_archiver.c
+++ b/src/bin/pg_dump/pg_backup_archiver.c
@@ -2315,12 +2315,12 @@ _allocAH(const char *FileSpec, const ArchiveFormat fmt,
AH->OF = stdout;
/*
- * On Windows, we need to use binary mode to read/write non-text archive
- * formats. Force stdin/stdout into binary mode if that is what we are
- * using.
+ * On Windows, we need to use binary mode to read/write non-text files,
+ * which include all archive formats as well as compressed plain text.
+ * Force stdin/stdout into binary mode if that is what we are using.
*/
#ifdef WIN32
- if (fmt != archNull &&
+ if ((fmt != archNull || compression != 0) &&
(AH->fSpec == NULL || strcmp(AH->fSpec, "") == 0))
{
if (mode == archModeWrite)