Fix null pointer dereference in "\c" psql command.
authorNoah Misch
Thu, 9 Jul 2015 00:44:21 +0000 (20:44 -0400)
committerNoah Misch
Thu, 9 Jul 2015 00:44:25 +0000 (20:44 -0400)
The psql crash happened when no current connection existed.  (The second
new check is optional given today's undocumented NULL argument handling
in PQhost() etc.)  Back-patch to 9.0 (all supported versions).

src/bin/psql/command.c

index 38253fa09886e9c0950372d02ac5ec12e6dbda23..467e34b1ffcd84a07f3b27a9437cb9b409a02c5c 100644 (file)
@@ -1641,7 +1641,8 @@ do_connect(char *dbname, char *user, char *host, char *port)
     * positional syntax.
     */
    keep_password =
-       ((strcmp(user, PQuser(o_conn)) == 0) &&
+       (o_conn &&
+        (strcmp(user, PQuser(o_conn)) == 0) &&
         (!host || strcmp(host, PQhost(o_conn)) == 0) &&
         (strcmp(port, PQport(o_conn)) == 0) &&
         !has_connection_string);
@@ -1768,7 +1769,8 @@ do_connect(char *dbname, char *user, char *host, char *port)
    /* Tell the user about the new connection */
    if (!pset.quiet)
    {
-       if (param_is_newly_set(PQhost(o_conn), PQhost(pset.db)) ||
+       if (!o_conn ||
+           param_is_newly_set(PQhost(o_conn), PQhost(pset.db)) ||
            param_is_newly_set(PQport(o_conn), PQport(pset.db)))
        {
            char       *host = PQhost(pset.db);