ecpg: Fix rare memory leaks
authorPeter Eisentraut <peter_e@gmx.net>
Thu, 8 Mar 2012 20:21:12 +0000 (22:21 +0200)
committerPeter Eisentraut <peter_e@gmx.net>
Thu, 8 Mar 2012 20:21:12 +0000 (22:21 +0200)
found by Coverity

src/interfaces/ecpg/ecpglib/connect.c
src/interfaces/ecpg/ecpglib/execute.c

index cf625f96a34c64789470e3962d63c05c1d844fe8..b54b1f5503626abae63b984f74c3bd1164bc19a0 100644 (file)
@@ -519,6 +519,10 @@ ECPGconnect(int lineno, int c, const char *name, const char *user, const char *p
            ecpg_free(realname);
        if (dbname)
            ecpg_free(dbname);
+       if (conn_keywords)
+           ecpg_free(conn_keywords);
+       if (conn_values)
+           ecpg_free(conn_values);
        free(this);
        return false;
    }
index 311bc5cbc50a7ade16d5f7052a101811a9a86b8c..50a2d95347edc4a656e7db2a1191e292052feff1 100644 (file)
@@ -1776,6 +1776,7 @@ ECPGdo(const int lineno, const int compat, const int force_indicator, const char
        {
            setlocale(LC_NUMERIC, oldlocale);
            ecpg_free(oldlocale);
+           free_statement(stmt);
            va_end(args);
            return (false);
        }
@@ -1807,6 +1808,7 @@ ECPGdo(const int lineno, const int compat, const int force_indicator, const char
            ecpg_raise(lineno, ECPG_INVALID_STMT, ECPG_SQLSTATE_INVALID_SQL_STATEMENT_NAME, stmt->command);
            setlocale(LC_NUMERIC, oldlocale);
            ecpg_free(oldlocale);
+           free_statement(stmt);
            va_end(args);
            return (false);
        }