diff --git a/src/bin/pg_basebackup/pg_createsubscriber.c b/src/bin/pg_basebackup/pg_createsubscriber.c
index a6e0986670..40a939f071 100644
--- a/src/bin/pg_basebackup/pg_createsubscriber.c
+++ b/src/bin/pg_basebackup/pg_createsubscriber.c
@@ -251,8 +251,8 @@ usage(void)
 static char *
 get_base_conninfo(const char *conninfo, char **dbname)
 {
-	PQExpBuffer buf = createPQExpBuffer();
-	PQconninfoOption *conn_opts = NULL;
+	PQExpBuffer buf;
+	PQconninfoOption *conn_opts;
 	PQconninfoOption *conn_opt;
 	char	   *errmsg = NULL;
 	char	   *ret;
@@ -265,6 +265,7 @@ get_base_conninfo(const char *conninfo, char **dbname)
 		return NULL;
 	}
 
+	buf = createPQExpBuffer();
 	i = 0;
 	for (conn_opt = conn_opts; conn_opt->keyword != NULL; conn_opt++)
 	{
@@ -497,6 +498,7 @@ connect_database(const char *conninfo, bool exit_on_error)
 	{
 		pg_log_error("connection to database failed: %s",
 					 PQerrorMessage(conn));
+		PQfinish(conn);
 		if (exit_on_error)
 			exit(1);
 
@@ -1209,6 +1211,7 @@ create_logical_replication_slot(PGconn *conn, struct LogicalRepInfo *dbinfo)
 			pg_log_error("could not create replication slot \"%s\" on database \"%s\": %s",
 						 slot_name, dbinfo->dbname,
 						 PQresultErrorMessage(res));
+			destroyPQExpBuffer(str);
 			return NULL;
 		}