Commit a4c8f143 authored by Bruce Momjian's avatar Bruce Momjian

libpq: pass a memory allocation failure error up to PQconndefaults()

Previously user name memory allocation failures were ignored and the
default user name set to NULL.
parent d1bdab2f
...@@ -741,16 +741,18 @@ pg_fe_getauthname(void) ...@@ -741,16 +741,18 @@ pg_fe_getauthname(void)
*/ */
pglock_thread(); pglock_thread();
if (!name) /*
{ * We document PQconndefaults() to return NULL for a memory allocation
* failure. We don't have an API to return a user name lookup failure,
* so we just assume it always succeeds.
*/
#ifdef WIN32 #ifdef WIN32
if (GetUserName(username, &namesize)) if (GetUserName(username, &namesize))
name = username; name = username;
#else #else
if (pqGetpwuid(geteuid(), &pwdstr, pwdbuf, sizeof(pwdbuf), &pw) == 0) if (pqGetpwuid(geteuid(), &pwdstr, pwdbuf, sizeof(pwdbuf), &pw) == 0)
name = pw->pw_name; name = pw->pw_name;
#endif #endif
}
authn = name ? strdup(name) : NULL; authn = name ? strdup(name) : NULL;
......
...@@ -4482,6 +4482,13 @@ conninfo_add_defaults(PQconninfoOption *options, PQExpBuffer errorMessage) ...@@ -4482,6 +4482,13 @@ conninfo_add_defaults(PQconninfoOption *options, PQExpBuffer errorMessage)
if (strcmp(option->keyword, "user") == 0) if (strcmp(option->keyword, "user") == 0)
{ {
option->val = pg_fe_getauthname(); option->val = pg_fe_getauthname();
if (!option->val)
{
if (errorMessage)
printfPQExpBuffer(errorMessage,
libpq_gettext("out of memory\n"));
return false;
}
continue; continue;
} }
} }
......
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