This patch solves a couple of memory leaks in ecpglib.c. The patch is
authorBruce Momjian
Tue, 14 Dec 1999 22:03:48 +0000 (22:03 +0000)
committerBruce Momjian
Tue, 14 Dec 1999 22:03:48 +0000 (22:03 +0000)
ok for both the
development tree (CVS) and for 6.5.3.

 Stephen Birch

src/interfaces/ecpg/lib/ecpglib.c

index 2cb0e105479c81004d12d12808ced43b497d05c4..3d6fd0562304aaeb1ea334beeb5f1ed43b588c36 100644 (file)
@@ -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);