From 17bab8c3fe25607758ad8318908ce200f6c909b5 Mon Sep 17 00:00:00 2001
From: Michael Meskes <meskes@postgresql.org>
Date: Sun, 25 Jun 2006 09:38:40 +0000
Subject: [PATCH] Moved some free() calls that coverity correctly complains
 about.

---
 src/interfaces/ecpg/ChangeLog            |  4 ++++
 src/interfaces/ecpg/ecpglib/descriptor.c |  4 ++--
 src/interfaces/ecpg/ecpglib/execute.c    | 18 ++++++++++++------
 src/interfaces/ecpg/test/test_init.pgc   |  2 +-
 4 files changed, 19 insertions(+), 9 deletions(-)

diff --git a/src/interfaces/ecpg/ChangeLog b/src/interfaces/ecpg/ChangeLog
index 9ddb041087b..5477c746520 100644
--- a/src/interfaces/ecpg/ChangeLog
+++ b/src/interfaces/ecpg/ChangeLog
@@ -2026,5 +2026,9 @@ we Jun 21 13:37:00 CEST 2006
 
 	- Added some more coverity report patches send in by Martijn van
 	  Oosterhout <kleptog@svana.org>.
+
+Su Jun 25 11:27:46 CEST 2006
+
+	- Moved some free() calls that coverity correctly complains about.
 	- Set ecpg library version to 5.2.
 	- Set ecpg version to 4.2.1.
diff --git a/src/interfaces/ecpg/ecpglib/descriptor.c b/src/interfaces/ecpg/ecpglib/descriptor.c
index 19fd0173a3f..9a3086bdda7 100644
--- a/src/interfaces/ecpg/ecpglib/descriptor.c
+++ b/src/interfaces/ecpg/ecpglib/descriptor.c
@@ -1,6 +1,6 @@
 /* dynamic SQL support routines
  *
- * $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/descriptor.c,v 1.15 2006/06/21 10:24:40 meskes Exp $
+ * $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/descriptor.c,v 1.16 2006/06/25 09:38:39 meskes Exp $
  */
 
 #define POSTGRES_ECPG_INTERNAL
@@ -349,7 +349,7 @@ ECPGget_desc(int lineno, const char *desc_name, int index,...)
 					return false;
 				}
 				/* allocate storage if needed */
-				if (arrsize == 0 && var != NULL && *(void **) var == NULL)
+				if (arrsize == 0 && *(void **) var == NULL)
 				{
 					void *mem = (void *) ECPGalloc(offset * ntuples, lineno);
 					if (!mem)
diff --git a/src/interfaces/ecpg/ecpglib/execute.c b/src/interfaces/ecpg/ecpglib/execute.c
index fc2af975470..4c43195b942 100644
--- a/src/interfaces/ecpg/ecpglib/execute.c
+++ b/src/interfaces/ecpg/ecpglib/execute.c
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.48 2006/06/21 11:38:07 meskes Exp $ */
+/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.49 2006/06/25 09:38:39 meskes Exp $ */
 
 /*
  * The aim is to get a simpler inteface to the database routines.
@@ -896,7 +896,7 @@ ECPGstore_input(const int lineno, const bool force_indicator, const struct varia
 							if (!(mallocedval = ECPGrealloc(mallocedval, strlen(mallocedval) + slen + sizeof("array [] "), lineno)))
 							{
 								PGTYPESnumeric_free(nval);
-								free(str);
+								ECPGfree(str);
 								return false;
 							}
 
@@ -905,8 +905,9 @@ ECPGstore_input(const int lineno, const bool force_indicator, const struct varia
 
 							strncpy(mallocedval + strlen(mallocedval), str, slen + 1);
 							strcpy(mallocedval + strlen(mallocedval), ",");
+							ECPGfree(str);
+							PGTYPESnumeric_free(nval);
 						}
-						PGTYPESnumeric_free(nval);
 						strcpy(mallocedval + strlen(mallocedval) - 1, "]");
 					}
 					else
@@ -929,12 +930,12 @@ ECPGstore_input(const int lineno, const bool force_indicator, const struct varia
 
 						strncpy(mallocedval, str, slen);
 						mallocedval[slen] = '\0';
+						ECPGfree(str);
+						PGTYPESnumeric_free(nval);
 					}
 
 					*tobeinserted_p = mallocedval;
 					*malloced_p = true;
-					PGTYPESnumeric_free(nval);
-					free(str);
 				}
 				break;
 
@@ -964,6 +965,7 @@ ECPGstore_input(const int lineno, const bool force_indicator, const struct varia
 							strcpy(mallocedval + strlen(mallocedval), "interval ");
 							strncpy(mallocedval + strlen(mallocedval), str, slen + 1);
 							strcpy(mallocedval + strlen(mallocedval), ",");
+							ECPGfree(str);
 						}
 						strcpy(mallocedval + strlen(mallocedval) - 1, "]");
 					}
@@ -983,11 +985,11 @@ ECPGstore_input(const int lineno, const bool force_indicator, const struct varia
 						strcpy(mallocedval, "interval ");
 						/* also copy trailing '\0' */
 						strncpy(mallocedval + strlen(mallocedval), str, slen + 1);
+						ECPGfree(str);
 					}
 
 					*tobeinserted_p = mallocedval;
 					*malloced_p = true;
-					ECPGfree(str);
 				}
 				break;
 
@@ -1163,6 +1165,7 @@ ECPGexecute(struct statement * stmt)
 			if (desc == NULL)
 			{
 				ECPGraise(stmt->lineno, ECPG_UNKNOWN_DESCRIPTOR, ECPG_SQLSTATE_INVALID_SQL_DESCRIPTOR_NAME, var->pointer);
+				ECPGfree(copiedquery);
 				return false;
 			}
 
@@ -1194,7 +1197,10 @@ ECPGexecute(struct statement * stmt)
 							desc_inlist.ind_offset = 0;
 						}
 						if (!ECPGstore_input(stmt->lineno, stmt->force_indicator, &desc_inlist, &tobeinserted, &malloced))
+						{
+							ECPGfree(copiedquery);
 							return false;
+						}
 
 						break;
 					}
diff --git a/src/interfaces/ecpg/test/test_init.pgc b/src/interfaces/ecpg/test/test_init.pgc
index 29b14b20bd5..22486362184 100644
--- a/src/interfaces/ecpg/test/test_init.pgc
+++ b/src/interfaces/ecpg/test/test_init.pgc
@@ -23,7 +23,7 @@ namespace N
 #endif
 
 int main(void)
-{ struct sa x,*y;
+{ struct sa x,*y=&x;
 exec sql begin declare section;
 int a=(int)2;
 int b=2+2;
-- 
GitLab