From 3704b99522dfd24849facdd574a2fdb218326469 Mon Sep 17 00:00:00 2001
From: "Marc G. Fournier" <scrappy@hub.org>
Date: Fri, 19 Jul 1996 07:00:56 +0000
Subject: [PATCH] - libpq calls "fe_getauthname()" two times in "fe-connect.c",
 but   doesn't free the buffer allocated by this function.

- submitted by: Erich Stamberger <eberger@gewi.kfunigraz.ac.at>
---
 src/interfaces/libpq/fe-connect.c | 34 +++++++++++++++++--------------
 1 file changed, 19 insertions(+), 15 deletions(-)

diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c
index 1a7c1fb6d85..58d29a679da 100644
--- a/src/interfaces/libpq/fe-connect.c
+++ b/src/interfaces/libpq/fe-connect.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.2 1996/07/12 04:53:57 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.3 1996/07/19 07:00:56 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -114,20 +114,23 @@ PQsetdb(char *pghost, char* pgport, char* pgoptions, char* pgtty, char* dbName)
     } else
 	conn->pgoptions = strdup(pgoptions);
 
-    if (!dbName || dbName[0] == '\0') {
-	char errorMessage[ERROR_MSG_LENGTH];
-	if (!(tmp = getenv("PGDATABASE")) &&
-	    !(tmp = fe_getauthname(errorMessage))) {
-	    sprintf(conn->errorMessage,
-		    "FATAL: PQsetdb: Unable to determine a database name!\n");
-/*	    pqdebug("%s", conn->errorMessage); */
-	    conn->dbName = NULL;
-	    return conn;
-	}
+    if (((tmp = dbName) && (dbName[0] != '\0')) ||
+	((tmp = getenv("PGDATABASE"))))
 	conn->dbName = strdup(tmp);
-    } else
-	conn->dbName = strdup(dbName);
-
+    else {
+      char errorMessage[ERROR_MSG_LENGTH];
+      if (tmp = fe_getauthname(errorMessage)) {
+	conn->dbName = strdup(tmp);
+	free(tmp);
+      }
+      else {
+	sprintf(conn->errorMessage,
+		"FATAL: PQsetdb: Unable to determine a database name!\n");
+/*	pqdebug("%s", conn->errorMessage); */
+	conn->dbName = NULL;
+	return conn;
+      }
+    }
     conn->status = connectDB(conn);
     return conn;
 }
@@ -164,8 +167,9 @@ connectDB(PGconn *conn)
     user = fe_getauthname(conn->errorMessage);
     if (!user)
 	goto connect_errReturn;
-    strncpy(startup.database,conn->dbName,sizeof(startup.database));
     strncpy(startup.user,user,sizeof(startup.user));
+    free(user);
+    strncpy(startup.database,conn->dbName,sizeof(startup.database));
     strncpy(startup.tty,conn->pgtty,sizeof(startup.tty));
     if (conn->pgoptions) {
 	strncpy(startup.options,conn->pgoptions, sizeof(startup.options));
-- 
GitLab