From 9805abb0fb1d2d57834a233d1a34279757d3f068 Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Tue, 14 Dec 1999 22:03:48 +0000
Subject: [PATCH] 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
---
 src/interfaces/ecpg/lib/ecpglib.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

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