]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fixed remaining Coverity bugs.
authorMichael Meskes <meskes@postgresql.org>
Wed, 5 Jul 2006 10:50:20 +0000 (10:50 +0000)
committerMichael Meskes <meskes@postgresql.org>
Wed, 5 Jul 2006 10:50:20 +0000 (10:50 +0000)
src/interfaces/ecpg/ecpglib/descriptor.c
src/interfaces/ecpg/ecpglib/execute.c

index 1ec9371f6c21587be77f640aa54e28ffd9fb84ea..d963edda4d2a097e75fe37b4ca264211d7be3d1c 100644 (file)
@@ -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)))
index 84341a67da3dfd9b6ce2960f27fc3906577a7860..e1a2091e159580e1b50c9b119976e1f523aae298 100644 (file)
@@ -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);