aboutsummaryrefslogtreecommitdiff
path: root/src/interfaces/ecpg/compatlib/informix.c
diff options
context:
space:
mode:
authorMichael Meskes <meskes@postgresql.org>2006-06-21 10:29:50 +0000
committerMichael Meskes <meskes@postgresql.org>2006-06-21 10:29:50 +0000
commit08f197391135951f7e60d65457103307dea89f0c (patch)
tree7d7f4c50018106b89d9d47cc4816145c33d0c5b1 /src/interfaces/ecpg/compatlib/informix.c
parent23623f05f05fcdc3142e83bf21cf4dc10e16aafd (diff)
downloadpostgresql-08f197391135951f7e60d65457103307dea89f0c.tar.gz
postgresql-08f197391135951f7e60d65457103307dea89f0c.zip
Added fixes 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.c35
1 files changed, 26 insertions, 9 deletions
diff --git a/src/interfaces/ecpg/compatlib/informix.c b/src/interfaces/ecpg/compatlib/informix.c
index b56929441cc..3cd8977521b 100644
--- a/src/interfaces/ecpg/compatlib/informix.c
+++ b/src/interfaces/ecpg/compatlib/informix.c
@@ -209,13 +209,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;
@@ -230,13 +231,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;
@@ -251,13 +253,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;
@@ -340,17 +343,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);
@@ -374,14 +381,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);
@@ -399,7 +409,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);
@@ -413,15 +426,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;