]> granicus.if.org Git - postgresql/commitdiff
libpq: pass a memory allocation failure error up to PQconndefaults()
authorBruce Momjian <bruce@momjian.us>
Thu, 20 Mar 2014 15:48:31 +0000 (11:48 -0400)
committerBruce Momjian <bruce@momjian.us>
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;
                }
        }