Do not use already free'ed errmsg, bug found by Joachim Wieland
authorMichael Meskes <meskes@postgresql.org>
Mon, 19 Jun 2006 09:20:32 +0000 (09:20 +0000)
committerMichael Meskes <meskes@postgresql.org>
Mon, 19 Jun 2006 09:20:32 +0000 (09:20 +0000)
<joachim.wieland@credativ.de>

src/interfaces/ecpg/ecpglib/connect.c

index a41e70a4f10e0d5db362288e23c477d9c80f6cbe..9734d0f6d9ce020f74e947704bdf05a5e8338498 100644 (file)
@@ -1,4 +1,4 @@
-/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/connect.c,v 1.17.2.1 2003/11/24 13:11:27 petere Exp $ */
+/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/connect.c,v 1.17.2.2 2006/06/19 09:20:32 meskes Exp $ */
 
 #define POSTGRES_ECPG_INTERNAL
 #include "postgres_fe.h"
@@ -386,10 +386,6 @@ ECPGconnect(int lineno, int c, const char *name, const char *user, const char *p
        const char *errmsg = PQerrorMessage(this->connection);
        char       *db = realname ? realname : "<DEFAULT>";
 
-       ecpg_finish(this);
-#ifdef ENABLE_THREAD_SAFETY
-       pthread_mutex_unlock(&connections_mutex);
-#endif
        ECPGlog("connect: could not open database %s on %s port %s %s%s%s%s in line %d\n\t%s\n",
                db,
                host ? host : "<DEFAULT>",
@@ -398,6 +394,11 @@ ECPGconnect(int lineno, int c, const char *name, const char *user, const char *p
                user ? "for user " : "", user ? user : "",
                lineno, errmsg);
 
+       ecpg_finish(this);
+#ifdef ENABLE_THREAD_SAFETY
+       pthread_mutex_unlock(&connections_mutex);
+#endif
+
        ECPGraise(lineno, ECPG_CONNECT, ECPG_SQLSTATE_SQLCLIENT_UNABLE_TO_ESTABLISH_SQLCONNECTION, db);
        if (host)
            ECPGfree(host);