From 3704b99522dfd24849facdd574a2fdb218326469 Mon Sep 17 00:00:00 2001 From: "Marc G. Fournier" 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 --- 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 1a7c1fb6d8..58d29a679d 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));