diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2018-05-21 00:32:28 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2018-05-21 00:32:52 -0400 |
commit | 5517367e978b29dedb1ca0e84a0285b8f9446fde (patch) | |
tree | 47e934f2818dc84898e766cf937923e6590ad0bc /src | |
parent | e52cabff7054005d2f7157c236d996dcd79baf5c (diff) |
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.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/backend/libpq/auth.c b/src/backend/libpq/auth.c index f9d4488d569..ce0d45ae739 100644 --- a/src/backend/libpq/auth.c +++ b/src/backend/libpq/auth.c @@ -1615,10 +1615,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; } |