From: Bruce Momjian <bruce@momjian.us> Date: Tue, 14 Dec 1999 22:03:48 +0000 (+0000) Subject: This patch solves a couple of memory leaks in ecpglib.c. The patch is X-Git-Tag: REL7_0~1027 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9805abb0fb1d2d57834a233d1a34279757d3f068;p=postgresql This patch solves a couple of memory leaks in ecpglib.c. The patch is ok for both the development tree (CVS) and for 6.5.3. Stephen Birch --- diff --git a/src/interfaces/ecpg/lib/ecpglib.c b/src/interfaces/ecpg/lib/ecpglib.c index 2cb0e10547..3d6fd05623 100644 --- a/src/interfaces/ecpg/lib/ecpglib.c +++ b/src/interfaces/ecpg/lib/ecpglib.c @@ -528,13 +528,13 @@ ECPGexecute(struct statement * stmt) { int slen = strlen((char *) var->value); - if (!(newcopy = ecpg_alloc(slen + 1, stmt->lineno))) + if (!(mallocedval = ecpg_alloc(slen + 1, stmt->lineno))) return false; - strncpy(newcopy, (char *) var->value, slen); - newcopy[slen] = '\0'; + strncpy(mallocedval, (char *) var->value, slen); + mallocedval[slen] = '\0'; - tobeinserted = newcopy; + tobeinserted = mallocedval; } break; case ECPGt_varchar: @@ -1132,13 +1132,13 @@ ECPGtrans(int lineno, const char *connection_name, const char *transaction) con->committed = true; /* deallocate all prepared statements */ - for (this = prep_stmts; this != NULL; this = this->next) - { - bool b = ECPGdeallocate(lineno, this->name); + while(prep_stmts != NULL) { + bool b = ECPGdeallocate(lineno, prep_stmts->name); if (!b) return false; } + } return true; @@ -1416,6 +1416,7 @@ ECPGdeallocate(int lineno, char *name) else prep_stmts = this->next; + free(this); return true; } ECPGlog("deallocate_prepare: invalid statement name %s\n", name);