Hi,

I'd like to report a bug in the memory management of libecpg
(PostgreSQL version 7.1.3).

The ECPGLog() call in ./src/interfaces/ecpg/lib/connect.c line 428
uses variables pointing to free()'ed storage (`realname', `host',
`port', and `options', see patch below).

regards,
        Sascha Demetrio

diff -u connect.c.old connect.c
--- connect.c.old       Sat Sep 29 16:51:41 2001
+++ connect.c   Sat Sep 29 16:53:03 2001
@@ -411,17 +411,6 @@
 
        this->connection = PQsetdbLogin(host, port, options, NULL, realname, user, 
passwd);
 
-       if (host)
-               free(host);
-       if (port)
-               free(port);
-       if (options)
-               free(options);
-       if (realname)
-               free(realname);
-       if (dbname)
-               free(dbname);
-
        if (PQstatus(this->connection) == CONNECTION_BAD)
        {
                ecpg_finish(this);
@@ -433,8 +422,31 @@
                                user ? "for user " : "", user ? user : "",
                                lineno);
                ECPGraise(lineno, ECPG_CONNECT, realname ? realname : "<DEFAULT>");
+
+               if (host)
+                       free(host);
+               if (port)
+                       free(port);
+               if (options)
+                       free(options);
+               if (realname)
+                       free(realname);
+               if (dbname)
+                       free(dbname);
+
                return false;
        }
+
+       if (host)
+               free(host);
+       if (port)
+               free(port);
+       if (options)
+               free(options);
+       if (realname)
+               free(realname);
+       if (dbname)
+               free(dbname);
 
        this->committed = true;
        this->autocommit = autocommit;


---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to [EMAIL PROTECTED] so that your
message can get through to the mailing list cleanly

Reply via email to