From 8d84dd00123985e739233fa67c9b1d555f33ed03 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Wed, 1 Apr 2020 14:45:45 +0900 Subject: [PATCH] Fix crash in psql when attempting to reuse old connection MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In a psql session, if the connection to the server is abruptly cut, the referenced connection would become NULL as of CheckConnection(). This could cause a hard crash with psql if attempting to connect by reusing the past connection's data because of a null-pointer dereference with either PQhost() or PQdb(). This issue is fixed by making sure that no reuse of the past connection is done if it does not exist. Issue has been introduced by 6e5f8d4, so backpatch down to 12. Reported-by: Hugh Wang Author: Michael Paquier Reviewed-by: Álvaro Herrera, Tom Lane Discussion: https://postgr.es/m/16330-b34835d83619e25d@postgresql.org Backpatch-through: 12 --- src/bin/psql/command.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index abb18a19c2..db31fa8753 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -2974,6 +2974,11 @@ do_connect(enum trivalue reuse_previous_specification, reuse_previous = !has_connection_string; break; } + + /* If the old connection does not exist, there is nothing to reuse. */ + if (!o_conn) + reuse_previous = false; + /* Silently ignore arguments subsequent to a connection string. */ if (has_connection_string) {