diff options
author | Michael Meskes <meskes@postgresql.org> | 2006-06-21 10:24:41 +0000 |
---|---|---|
committer | Michael Meskes <meskes@postgresql.org> | 2006-06-21 10:24:41 +0000 |
commit | a829da152c6cdf425c6c81ef74b494ec87d90d99 (patch) | |
tree | ba7deb613782ad91ca9b4a691a2cfdb1a042c9e6 /src/interfaces/ecpg/compatlib/informix.c | |
parent | 27c3e3de0939d93ae8adb50ab7e00c4a5ff2fa0d (diff) | |
download | postgresql-a829da152c6cdf425c6c81ef74b494ec87d90d99.tar.gz postgresql-a829da152c6cdf425c6c81ef74b494ec87d90d99.zip |
Added fixed from the coverity report send in by Joachim Wieland <joe@mcknight.de>
Added missing error handling in a few functions in ecpglib
Diffstat (limited to 'src/interfaces/ecpg/compatlib/informix.c')
-rw-r--r-- | src/interfaces/ecpg/compatlib/informix.c | 37 |
1 files changed, 27 insertions, 10 deletions
diff --git a/src/interfaces/ecpg/compatlib/informix.c b/src/interfaces/ecpg/compatlib/informix.c index 84c2574e15c..24df35cfce7 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.42 2006/04/24 09:45:22 meskes Exp $ */ +/* $PostgreSQL: pgsql/src/interfaces/ecpg/compatlib/informix.c,v 1.43 2006/06/21 10:24:40 meskes Exp $ */ #include <stdlib.h> #include <string.h> @@ -211,13 +211,14 @@ deccvasc(char *cp, int len, decimal *np) int deccvdbl(double dbl, decimal *np) { - numeric *nres = PGTYPESnumeric_new(); + numeric *nres; int result = 1; rsetnull(CDECIMALTYPE, (char *) np); if (risnull(CDOUBLETYPE, (char *) &dbl)) return 0; + nres = PGTYPESnumeric_new(); if (nres == NULL) return ECPG_INFORMIX_OUT_OF_MEMORY; @@ -232,13 +233,14 @@ deccvdbl(double dbl, decimal *np) int deccvint(int in, decimal *np) { - numeric *nres = PGTYPESnumeric_new(); + numeric *nres; int result = 1; rsetnull(CDECIMALTYPE, (char *) np); if (risnull(CINTTYPE, (char *) &in)) return 0; + nres = PGTYPESnumeric_new(); if (nres == NULL) return ECPG_INFORMIX_OUT_OF_MEMORY; @@ -253,13 +255,14 @@ deccvint(int in, decimal *np) int deccvlong(long lng, decimal *np) { - numeric *nres = PGTYPESnumeric_new(); + numeric *nres; int result = 1; rsetnull(CDECIMALTYPE, (char *) np); if (risnull(CLONGTYPE, (char *) &lng)) return 0; + nres = PGTYPESnumeric_new(); if (nres == NULL) return ECPG_INFORMIX_OUT_OF_MEMORY; @@ -342,17 +345,21 @@ int dectoasc(decimal *np, char *cp, int len, int right) { char *str; - numeric *nres = PGTYPESnumeric_new(); - - if (nres == NULL) - return ECPG_INFORMIX_OUT_OF_MEMORY; + numeric *nres; rsetnull(CSTRINGTYPE, (char *) cp); if (risnull(CDECIMALTYPE, (char *) np)) return 0; + nres = PGTYPESnumeric_new(); + if (nres == NULL) + return ECPG_INFORMIX_OUT_OF_MEMORY; + if (PGTYPESnumeric_from_decimal(np, nres) != 0) + { + PGTYPESnumeric_free(nres); return ECPG_INFORMIX_OUT_OF_MEMORY; + } if (right >= 0) str = PGTYPESnumeric_to_asc(nres, right); @@ -376,14 +383,17 @@ dectoasc(decimal *np, char *cp, int len, int right) int dectodbl(decimal *np, double *dblp) { - numeric *nres = PGTYPESnumeric_new(); int i; + numeric *nres = PGTYPESnumeric_new(); if (nres == NULL) return ECPG_INFORMIX_OUT_OF_MEMORY; if (PGTYPESnumeric_from_decimal(np, nres) != 0) + { + PGTYPESnumeric_free(nres); return ECPG_INFORMIX_OUT_OF_MEMORY; + } i = PGTYPESnumeric_to_double(nres, dblp); PGTYPESnumeric_free(nres); @@ -401,7 +411,10 @@ dectoint(decimal *np, int *ip) return ECPG_INFORMIX_OUT_OF_MEMORY; if (PGTYPESnumeric_from_decimal(np, nres) != 0) + { + PGTYPESnumeric_free(nres); return ECPG_INFORMIX_OUT_OF_MEMORY; + } ret = PGTYPESnumeric_to_int(nres, ip); @@ -415,15 +428,19 @@ int dectolong(decimal *np, long *lngp) { int ret; - numeric *nres = PGTYPESnumeric_new();; + numeric *nres = PGTYPESnumeric_new(); if (nres == NULL) return ECPG_INFORMIX_OUT_OF_MEMORY; if (PGTYPESnumeric_from_decimal(np, nres) != 0) + { + PGTYPESnumeric_free(nres); return ECPG_INFORMIX_OUT_OF_MEMORY; + } ret = PGTYPESnumeric_to_long(nres, lngp); + PGTYPESnumeric_free(nres); if (ret == PGTYPES_NUM_OVERFLOW) ret = ECPG_INFORMIX_NUM_OVERFLOW; |