Fix null pointer dereference in "\c" psql command.

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).
This commit is contained in:
Noah Misch 2015-07-08 20:44:21 -04:00
parent 080c4dab3d
commit fb990ce6c7

View 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);