libpq: pass a memory allocation failure error up to PQconndefaults()
authorBruce Momjian
Thu, 20 Mar 2014 15:48:31 +0000 (11:48 -0400)
committerBruce Momjian
Thu, 20 Mar 2014 15:48:31 +0000 (11:48 -0400)
Previously user name memory allocation failures were ignored and the
default user name set to NULL.

src/interfaces/libpq/fe-auth.c
src/interfaces/libpq/fe-connect.c

index e10c97091087515f00b1d5d13ec5f8cfbe2b78a8..5ddd17d5df7eb96acceb4bb8c5f005492a1807b5 100644 (file)
@@ -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;
 
index da8335e6805ac576596f7761d9fa9d1253309d92..d53c41f6a3d742a66908f400b44539fc1595ae78 100644 (file)
@@ -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;
        }
    }