summaryrefslogtreecommitdiff
path: root/src/interfaces/ecpg/ecpglib/descriptor.c
diff options
context:
space:
mode:
authorMichael Meskes <meskes@postgresql.org>2007-06-11 11:52:08 +0000
committerMichael Meskes <meskes@postgresql.org>2007-06-11 11:52:08 +0000
commit91411b6105850567b823dd36cc854c0f12cebdd6 (patch)
tree4c4fd2b985280959462b32fe436070c29894297a /src/interfaces/ecpg/ecpglib/descriptor.c
parent5f2bda15eb52acf5c877172e5d77e70ac06df905 (diff)
Fixed one memory leak in descriptor code.
Made sure ecpg deletes output file in case of an error.
Diffstat (limited to 'src/interfaces/ecpg/ecpglib/descriptor.c')
-rw-r--r--src/interfaces/ecpg/ecpglib/descriptor.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/interfaces/ecpg/ecpglib/descriptor.c b/src/interfaces/ecpg/ecpglib/descriptor.c
index 88d07c0b8dd..0a4ecf86fc7 100644
--- a/src/interfaces/ecpg/ecpglib/descriptor.c
+++ b/src/interfaces/ecpg/ecpglib/descriptor.c
@@ -1,6 +1,6 @@
/* dynamic SQL support routines
*
- * $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/descriptor.c,v 1.21 2007/04/27 06:56:11 meskes Exp $
+ * $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/descriptor.c,v 1.22 2007/06/11 11:52:08 meskes Exp $
*/
#define POSTGRES_ECPG_INTERNAL
@@ -547,7 +547,7 @@ ECPGset_desc(int lineno, const char *desc_name, int index,...)
ECPGfree(var);
return false;
}
-
+ ECPGfree(desc_item->data); /* free() takes care of a potential NULL value */
desc_item->data = (char *) tobeinserted;
tobeinserted = NULL;
break;
@@ -607,6 +607,18 @@ ECPGdeallocate_desc(int line, const char *name)
{
if (!strcmp(name, i->name))
{
+ struct descriptor_item *desc_item;
+
+ for (desc_item = i->items; desc_item;)
+ {
+ struct descriptor_item *di;
+
+ ECPGfree(desc_item->data);
+ di = desc_item;
+ desc_item = desc_item->next;
+ ECPGfree(di);
+ }
+
*lastptr = i->next;
ECPGfree(i->name);
PQclear(i->result);