summaryrefslogtreecommitdiff
path: root/src/common/logging.c
diff options
context:
space:
mode:
authorTom Lane2019-07-06 15:25:37 +0000
committerTom Lane2019-07-06 15:25:37 +0000
commitfb30c9c1c5c36989d6b93906986358cb96936d64 (patch)
treeb52a47704d2333120d09e68e4d03b7f5e1c4c7ab /src/common/logging.c
parentb33283c36409aef7eddb5ba92bdd9300dd45d974 (diff)
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/[email protected]
Diffstat (limited to 'src/common/logging.c')
-rw-r--r--src/common/logging.c2
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 */