diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2019-07-06 11:25:37 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2019-07-06 11:25:48 -0400 |
commit | cf665ad4c89eb9b20285dc04aec906d46ed810d2 (patch) | |
tree | 74ce060b75bf77f6e8fdec9f940f800fe38ab2b4 | |
parent | c8e0997239840888a974624b0ab020177357f0ae (diff) | |
download | postgresql-cf665ad4c89eb9b20285dc04aec906d46ed810d2.tar.gz postgresql-cf665ad4c89eb9b20285dc04aec906d46ed810d2.zip |
In pg_log_generic(), be more paranoid about preserving errno.
This code failed to account for the possibility that malloc() would
change errno, resulting in wrong output for %m, not to mention the
possibility of message truncation. Such a change is obviously
expected when malloc fails, but there's reason to fear that on some
platforms even a successful malloc call can modify errno.
Discussion: https://postgr.es/m/2576.1527382833@sss.pgh.pa.us
-rw-r--r-- | src/common/logging.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/common/logging.c b/src/common/logging.c index f247554a32b..895da7150e7 100644 --- a/src/common/logging.c +++ b/src/common/logging.c @@ -216,6 +216,8 @@ pg_log_generic_v(enum pg_log_level level, const char *pg_restrict fmt, va_list a buf = pg_malloc_extended(required_len, MCXT_ALLOC_NO_OOM); + errno = save_errno; /* malloc might change errno */ + if (!buf) { /* memory trouble, just print what we can and get out of here */ |