diff options
author | Michael Meskes <meskes@postgresql.org> | 2006-07-05 10:50:20 +0000 |
---|---|---|
committer | Michael Meskes <meskes@postgresql.org> | 2006-07-05 10:50:20 +0000 |
commit | 33215c2b7827eb61860d0b9d9f7b3ee63f4c6537 (patch) | |
tree | 73a227934df8ca7986b21ed1d13bb29e3bbe0cc9 /src | |
parent | b48aeb5145ea61dda20e1307e532df3976a463cc (diff) | |
download | postgresql-33215c2b7827eb61860d0b9d9f7b3ee63f4c6537.tar.gz |
Fixed remaining Coverity bugs.
Diffstat (limited to 'src')
-rw-r--r-- | src/interfaces/ecpg/ecpglib/descriptor.c | 11 | ||||
-rw-r--r-- | src/interfaces/ecpg/ecpglib/execute.c | 25 |
2 files changed, 26 insertions, 10 deletions
diff --git a/src/interfaces/ecpg/ecpglib/descriptor.c b/src/interfaces/ecpg/ecpglib/descriptor.c index 1ec9371f6c..d963edda4d 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.12.4.3 2006/06/21 10:31:45 meskes Exp $ + * $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/descriptor.c,v 1.12.4.4 2006/07/05 10:50:20 meskes Exp $ */ #define POSTGRES_ECPG_INTERNAL @@ -249,7 +249,7 @@ ECPGget_desc(int lineno, const char *desc_name, int index,...) data_var.ind_varcharsize = varcharsize; data_var.ind_arrsize = arrsize; data_var.ind_offset = offset; - if (data_var.ind_arrsize == 0 || data_var.ind_varcharsize == 0) + if ((data_var.ind_arrsize == 0 || data_var.ind_varcharsize == 0) && data_var.ind_pointer != NULL) data_var.ind_value = *((void **) (data_var.ind_pointer)); else data_var.ind_value = data_var.ind_pointer; @@ -397,7 +397,8 @@ ECPGget_desc(int lineno, const char *desc_name, int index,...) setlocale(LC_NUMERIC, oldlocale); ECPGfree(oldlocale); } - else if (data_var.ind_type != ECPGt_NO_INDICATOR) + else if (data_var.ind_type != ECPGt_NO_INDICATOR && data_var.ind_pointer != NULL) + /* ind_type != NO_INDICATOR should always have ind_pointer != NULL but since this might be changed manually in the .c file let's play it safe */ { /* * this is like ECPGstore_result but since we don't have a data @@ -410,8 +411,9 @@ ECPGget_desc(int lineno, const char *desc_name, int index,...) ECPGraise(lineno, ECPG_TOO_MANY_MATCHES, ECPG_SQLSTATE_CARDINALITY_VIOLATION, NULL); return false; } + /* allocate storage if needed */ - if (data_var.ind_arrsize == 0 && data_var.ind_pointer != NULL && data_var.ind_value == NULL) + if (data_var.ind_arrsize == 0 && data_var.ind_value == NULL) { void *mem = (void *) ECPGalloc(data_var.ind_offset * ntuples, lineno); if (!mem) @@ -420,6 +422,7 @@ ECPGget_desc(int lineno, const char *desc_name, int index,...) ECPGadd_mem(mem, lineno); data_var.ind_value = mem; } + for (act_tuple = 0; act_tuple < ntuples; act_tuple++) { if (!get_int_item(lineno, data_var.ind_value, data_var.ind_type, -PQgetisnull(ECPGresult, act_tuple, index))) diff --git a/src/interfaces/ecpg/ecpglib/execute.c b/src/interfaces/ecpg/ecpglib/execute.c index 84341a67da..e1a2091e15 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.38.4.8 2006/06/26 09:20:30 meskes Exp $ */ +/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.38.4.9 2006/07/05 10:50:20 meskes Exp $ */ /* * The aim is to get a simpler inteface to the database routines. @@ -880,12 +880,13 @@ ECPGstore_input(const int lineno, const bool force_indicator, const struct varia { char *str = NULL; int slen; - numeric *nval = PGTYPESnumeric_new(); + numeric *nval; if (var->arrsize > 1) { - for (element = 0; element < var->arrsize; element++, nval = PGTYPESnumeric_new()) + for (element = 0; element < var->arrsize; element++) { + nval = PGTYPESnumeric_new(); if (!nval) return false; @@ -915,6 +916,7 @@ ECPGstore_input(const int lineno, const bool force_indicator, const struct varia } else { + nval = PGTYPESnumeric_new(); if (!nval) return false; @@ -1052,16 +1054,22 @@ ECPGstore_input(const int lineno, const bool force_indicator, const struct varia case ECPGt_timestamp: { - char *str = NULL; + char *str = NULL, *asc = NULL; int slen; if (var->arrsize > 1) { for (element = 0; element < var->arrsize; element++) { - str = quote_postgres(PGTYPEStimestamp_to_asc(*(timestamp *) ((var + var->offset * element)->value)), lineno); + asc = PGTYPEStimestamp_to_asc(*(timestamp *) ((var + var->offset * element)->value)); + if (!asc) + return false; + + str = quote_postgres(asc, lineno); + ECPGfree(asc); /* we don't need this anymore so free it asap. */ if (!str) return false; + slen = strlen(str); if (!(mallocedval = ECPGrealloc(mallocedval, strlen(mallocedval) + slen + sizeof("array [], timestamp "), lineno))) @@ -1081,7 +1089,12 @@ ECPGstore_input(const int lineno, const bool force_indicator, const struct varia } else { - str = quote_postgres(PGTYPEStimestamp_to_asc(*(timestamp *) (var->value)), lineno); + asc = PGTYPEStimestamp_to_asc(*(timestamp *) (var->value)); + if (!asc) + return false; + + str = quote_postgres(asc, lineno); + ECPGfree(asc); /* we don't need this anymore so free it asap. */ if (!str) return false; slen = strlen(str); |