summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Meskes <meskes@postgresql.org>2006-07-05 10:50:20 +0000
committerMichael Meskes <meskes@postgresql.org>2006-07-05 10:50:20 +0000
commit33215c2b7827eb61860d0b9d9f7b3ee63f4c6537 (patch)
tree73a227934df8ca7986b21ed1d13bb29e3bbe0cc9 /src
parentb48aeb5145ea61dda20e1307e532df3976a463cc (diff)
downloadpostgresql-33215c2b7827eb61860d0b9d9f7b3ee63f4c6537.tar.gz
Fixed remaining Coverity bugs.
Diffstat (limited to 'src')
-rw-r--r--src/interfaces/ecpg/ecpglib/descriptor.c11
-rw-r--r--src/interfaces/ecpg/ecpglib/execute.c25
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);