]> granicus.if.org Git - postgresql/commitdiff
This patch solves a couple of memory leaks in ecpglib.c. The patch is
authorBruce Momjian <bruce@momjian.us>
Tue, 14 Dec 1999 22:03:48 +0000 (22:03 +0000)
committerBruce Momjian <bruce@momjian.us>
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);