postgres.git / summary / log / commit / refs
commit cf665ad4c89eb9b20285dc04aec906d46ed810d2
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date: Sat Jul 06 15:25:37 2019 +0000
First released in: 13.0, 12.0
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
src/common/logging.c | 2 ++
1 file changed, 2 insertions(+)
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 */
[parent: c8e099723984]