diff --git a/src/interfaces/libpq/fe-auth.c b/src/interfaces/libpq/fe-auth.c
index e10c97091087515f00b1d5d13ec5f8cfbe2b78a8..5ddd17d5df7eb96acceb4bb8c5f005492a1807b5 100644
--- a/src/interfaces/libpq/fe-auth.c
+++ b/src/interfaces/libpq/fe-auth.c
@@ -741,16 +741,18 @@ pg_fe_getauthname(void)
 	 */
 	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
-		if (GetUserName(username, &namesize))
-			name = username;
+	if (GetUserName(username, &namesize))
+		name = username;
 #else
-		if (pqGetpwuid(geteuid(), &pwdstr, pwdbuf, sizeof(pwdbuf), &pw) == 0)
-			name = pw->pw_name;
+	if (pqGetpwuid(geteuid(), &pwdstr, pwdbuf, sizeof(pwdbuf), &pw) == 0)
+		name = pw->pw_name;
 #endif
-	}
 
 	authn = name ? strdup(name) : NULL;
 
diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c
index da8335e6805ac576596f7761d9fa9d1253309d92..d53c41f6a3d742a66908f400b44539fc1595ae78 100644
--- a/src/interfaces/libpq/fe-connect.c
+++ b/src/interfaces/libpq/fe-connect.c
@@ -4482,6 +4482,13 @@ conninfo_add_defaults(PQconninfoOption *options, PQExpBuffer errorMessage)
 		if (strcmp(option->keyword, "user") == 0)
 		{
 			option->val = pg_fe_getauthname();
+			if (!option->val)
+			{
+				if (errorMessage)
+					printfPQExpBuffer(errorMessage,
+									  libpq_gettext("out of memory\n"));
+				return false;
+			}
 			continue;
 		}
 	}