Fixed two memory leaks in ecpglib.
authorMichael Meskes <meskes@postgresql.org>
Tue, 6 Jun 2006 11:36:00 +0000 (11:36 +0000)
committerMichael Meskes <meskes@postgresql.org>
Tue, 6 Jun 2006 11:36:00 +0000 (11:36 +0000)
src/interfaces/ecpg/ecpglib/data.c

index fe258dba8f8a8f7e31bc4eb6608b6386ca96de47..a7e1a835350a10d2aa320ed5db86a6931b5dbe68 100644 (file)
@@ -1,4 +1,4 @@
-/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/data.c,v 1.20.2.2 2005/08/24 10:35:54 meskes Exp $ */
+/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/data.c,v 1.20.2.3 2006/06/06 11:36:00 meskes Exp $ */
 
 #define POSTGRES_ECPG_INTERNAL
 #include "postgres_fe.h"
@@ -426,6 +426,7 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
 
                        if (garbage_left(isarray, scan_length, compat))
                        {
+                           free(nres);
                            ECPGraise(lineno, ECPG_NUMERIC_FORMAT, ECPG_SQLSTATE_DATATYPE_MISMATCH, pval);
                            return (false);
                        }
@@ -438,6 +439,8 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
                    PGTYPESnumeric_copy(nres, (numeric *) (var + offset * act_tuple));
                else
                    PGTYPESnumeric_to_decimal(nres, (decimal *) (var + offset * act_tuple));
+
+               free(nres);
                break;
 
            case ECPGt_interval:
@@ -469,6 +472,7 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
 
                        if (garbage_left(isarray, scan_length, compat))
                        {
+                           free(ires);
                            ECPGraise(lineno, ECPG_INTERVAL_FORMAT, ECPG_SQLSTATE_DATATYPE_MISMATCH, pval);
                            return (false);
                        }
@@ -478,6 +482,7 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno,
                    ires = PGTYPESinterval_from_asc("0 seconds", NULL);
 
                PGTYPESinterval_copy(ires, (interval *) (var + offset * act_tuple));
+               free(ires);
                break;
            case ECPGt_date:
                if (pval)