From 91411b6105850567b823dd36cc854c0f12cebdd6 Mon Sep 17 00:00:00 2001 From: Michael Meskes Date: Mon, 11 Jun 2007 11:52:08 +0000 Subject: Fixed one memory leak in descriptor code. Made sure ecpg deletes output file in case of an error. --- src/interfaces/ecpg/ecpglib/descriptor.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'src/interfaces/ecpg/ecpglib/descriptor.c') 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); -- cgit v1.2.3