diff --git a/src/interfaces/ecpg/ChangeLog b/src/interfaces/ecpg/ChangeLog
index 5477c7465209cf8ba76e834cd91623afcc564576..29f41b9e4632f65f2a5aa02aa05c09f1acdd7e0e 100644
--- a/src/interfaces/ecpg/ChangeLog
+++ b/src/interfaces/ecpg/ChangeLog
@@ -2030,5 +2030,10 @@ we Jun 21 13:37:00 CEST 2006
 Su Jun 25 11:27:46 CEST 2006
 
 	- Moved some free() calls that coverity correctly complains about.
+
+Mo Jun 26 11:05:25 CEST 2006
+
+	- Added some more coverity report patches send in by Joachim Wieland
+	  <joe@mcknight.de>.
 	- Set ecpg library version to 5.2.
 	- Set ecpg version to 4.2.1.
diff --git a/src/interfaces/ecpg/compatlib/informix.c b/src/interfaces/ecpg/compatlib/informix.c
index a9ec92448f3bb79eec57b1e74933f8d1662cf81f..65da37dcdee3ee1cf5958fa0710b1f1d282a0d10 100644
--- a/src/interfaces/ecpg/compatlib/informix.c
+++ b/src/interfaces/ecpg/compatlib/informix.c
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/src/interfaces/ecpg/compatlib/informix.c,v 1.45 2006/06/25 01:45:32 momjian Exp $ */
+/* $PostgreSQL: pgsql/src/interfaces/ecpg/compatlib/informix.c,v 1.46 2006/06/26 09:20:09 meskes Exp $ */
 
 #include <stdlib.h>
 #include <string.h>
@@ -417,6 +417,7 @@ dectoint(decimal *np, int *ip)
 	}
 
 	ret = PGTYPESnumeric_to_int(nres, ip);
+	PGTYPESnumeric_free(nres);
 
 	if (ret == PGTYPES_NUM_OVERFLOW)
 		ret = ECPG_INFORMIX_NUM_OVERFLOW;
diff --git a/src/interfaces/ecpg/ecpglib/execute.c b/src/interfaces/ecpg/ecpglib/execute.c
index 4c43195b9426697b55c879cd9e1ae534ec2d2162..0ac6b909807094e5bfcdb43ca72bb9233310f9ea 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.49 2006/06/25 09:38:39 meskes Exp $ */
+/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.50 2006/06/26 09:20:09 meskes Exp $ */
 
 /*
  * The aim is to get a simpler inteface to the database routines.
@@ -875,16 +875,16 @@ ECPGstore_input(const int lineno, const bool force_indicator, const struct varia
 			case ECPGt_numeric:
 				{
 					char	   *str = NULL;
-					int			slen;
+					int	    slen;
 					numeric    *nval = PGTYPESnumeric_new();
 
-					if (!nval)
-						return false;
-
 					if (var->arrsize > 1)
 					{
 						for (element = 0; element < var->arrsize; element++, nval = PGTYPESnumeric_new())
 						{
+							if (!nval)
+								return false;
+								
 							if (var->type == ECPGt_numeric)
 								PGTYPESnumeric_copy((numeric *) ((var + var->offset * element)->value), nval);
 							else
@@ -892,10 +892,10 @@ ECPGstore_input(const int lineno, const bool force_indicator, const struct varia
 
 							str = PGTYPESnumeric_to_asc(nval, nval->dscale);
 							slen = strlen(str);
+							PGTYPESnumeric_free(nval);
 
 							if (!(mallocedval = ECPGrealloc(mallocedval, strlen(mallocedval) + slen + sizeof("array [] "), lineno)))
 							{
-								PGTYPESnumeric_free(nval);
 								ECPGfree(str);
 								return false;
 							}
@@ -906,24 +906,25 @@ 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);
 						}
 						strcpy(mallocedval + strlen(mallocedval) - 1, "]");
 					}
 					else
 					{
+						if (!nval)
+							return false;
+
 						if (var->type == ECPGt_numeric)
 							PGTYPESnumeric_copy((numeric *) (var->value), nval);
 						else
 							PGTYPESnumeric_from_decimal((decimal *) (var->value), nval);
 
 						str = PGTYPESnumeric_to_asc(nval, nval->dscale);
-
 						slen = strlen(str);
+						PGTYPESnumeric_free(nval);
 
 						if (!(mallocedval = ECPGalloc(slen + 1, lineno)))
 						{
-							PGTYPESnumeric_free(nval);
 							free(str);
 							return false;
 						}
@@ -931,7 +932,6 @@ 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;