diff options
| author | Michael Meskes <meskes@postgresql.org> | 2007-06-11 11:52:08 +0000 |
|---|---|---|
| committer | Michael Meskes <meskes@postgresql.org> | 2007-06-11 11:52:08 +0000 |
| commit | 91411b6105850567b823dd36cc854c0f12cebdd6 (patch) | |
| tree | 4c4fd2b985280959462b32fe436070c29894297a /src/interfaces/ecpg/ecpglib/descriptor.c | |
| parent | 5f2bda15eb52acf5c877172e5d77e70ac06df905 (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.c | 16 |
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); |
