Commit fb30c9c1 authored by Tom Lane's avatar Tom Lane

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
parent b33283c3
...@@ -216,6 +216,8 @@ pg_log_generic_v(enum pg_log_level level, const char *pg_restrict fmt, va_list a ...@@ -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); buf = pg_malloc_extended(required_len, MCXT_ALLOC_NO_OOM);
errno = save_errno; /* malloc might change errno */
if (!buf) if (!buf)
{ {
/* memory trouble, just print what we can and get out of here */ /* memory trouble, just print what we can and get out of here */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment