aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2018-05-21 00:32:28 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2018-05-21 00:32:28 -0400
commit81256cd05f0745353c6572362155b57250a0d2a0 (patch)
treeeb51a8d387afe6dce84687ee7dc4d1fe7ed017b0 /src
parenta13b47a59ffce6f3c13c8b777738a3aab1db10d3 (diff)
downloadpostgresql-81256cd05f0745353c6572362155b57250a0d2a0.tar.gz
postgresql-81256cd05f0745353c6572362155b57250a0d2a0.zip
Fix unsafe usage of strerror(errno) within ereport().
This is the converse of the unsafe-usage-of-%m problem: the reason ereport/elog provide that format code is mainly to dodge the hazard of errno getting changed before control reaches functions within the arguments of the macro. I only found one instance of this hazard, but it's been there since 9.4 :-(.
Diffstat (limited to 'src')
-rw-r--r--src/backend/libpq/auth.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/backend/libpq/auth.c b/src/backend/libpq/auth.c
index 3014b17a7c1..63f37902e64 100644
--- a/src/backend/libpq/auth.c
+++ b/src/backend/libpq/auth.c
@@ -2041,10 +2041,12 @@ auth_peer(hbaPort *port)
pw = getpwuid(uid);
if (!pw)
{
+ int save_errno = errno;
+
ereport(LOG,
(errmsg("could not look up local user ID %ld: %s",
(long) uid,
- errno ? strerror(errno) : _("user does not exist"))));
+ save_errno ? strerror(save_errno) : _("user does not exist"))));
return STATUS_ERROR;
}