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);