Changeset: c060a1905586 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c060a1905586
Modified Files:
        buildtools/coverity_model.c
        monetdb5/mal/mal_debugger.c
        monetdb5/mal/mal_exception.c
        monetdb5/mal/mal_instruction.c
        monetdb5/mal/mal_private.h
        monetdb5/optimizer/opt_mergetable.c
Branch: Oct2020
Log Message:

Coverity issues.


diffs (181 lines):

diff --git a/buildtools/coverity_model.c b/buildtools/coverity_model.c
--- a/buildtools/coverity_model.c
+++ b/buildtools/coverity_model.c
@@ -156,6 +156,15 @@ createMalException(MalBlkPtr mb, int pc,
        return p;
 }
 
+char *
+dupError(const char *err)
+{
+       char *p;
+       p = __coverity_alloc_nosize__();
+       __coverity_mark_as_afm_allocated__(p, "freeException");
+       return p;
+}
+
 void
 freeException(char *p)
 {
@@ -164,3 +173,13 @@ freeException(char *p)
                __coverity_mark_as_afm_freed__(p, "freeException");
        }
 }
+
+char *
+concatErrors(char *err1, const char *err2)
+{
+       freeException(err1);
+       char *p;
+       p = __coverity_alloc_nosize__();
+       __coverity_mark_as_afm_allocated__(p, "freeException");
+       return p;
+}
diff --git a/monetdb5/mal/mal_debugger.c b/monetdb5/mal/mal_debugger.c
--- a/monetdb5/mal/mal_debugger.c
+++ b/monetdb5/mal/mal_debugger.c
@@ -140,7 +140,7 @@ printStackElm(stream *f, MalBlkPtr mb, V
        }
        nmeOnStk = v ? getTypeName(v->vtype) : GDKstrdup(nme);
        /* check for type errors */
-       if (strcmp(nmeOnStk, nme) && strncmp(nmeOnStk, "BAT", 3))
+       if (nmeOnStk && strcmp(nmeOnStk, nme) && strncmp(nmeOnStk, "BAT", 3))
                mnstr_printf(f, "!%s ", nmeOnStk);
        mnstr_printf(f, " %s", (isVarConstant(mb, index) ? " constant" : ""));
        mnstr_printf(f, " %s", (isVarUsed(mb,index) ? "": " not used" ));
diff --git a/monetdb5/mal/mal_exception.c b/monetdb5/mal/mal_exception.c
--- a/monetdb5/mal/mal_exception.c
+++ b/monetdb5/mal/mal_exception.c
@@ -53,6 +53,18 @@ dupError(const char *err)
        return msg ? msg : M5OutOfMemory;
 }
 
+char *
+concatErrors(char *err1, const char *err2)
+{
+       size_t len = strlen(err1) + strlen(err2) + 1;
+       char *new = GDKmalloc(len);
+       if (new == NULL)
+               return err1;
+       strconcat_len(new, len, err1, err2, NULL);
+       freeException(err1);
+       return new;
+}
+
 /**
  * Internal helper function for createException and
  * showException such that they share the same code, because reuse
diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c
--- a/monetdb5/mal/mal_instruction.c
+++ b/monetdb5/mal/mal_instruction.c
@@ -23,19 +23,10 @@
 void
 addMalException(MalBlkPtr mb, str msg)
 {
-       str new;
-
        if( msg == NULL)
                return;
        if( mb->errors){
-               size_t len = strlen(mb->errors) + strlen(msg) + 1;
-               new = GDKzalloc(len);
-               if (new == NULL)
-                       // just stick to one error message, ignore rest
-                       return ;
-               strconcat_len(new, len, mb->errors, msg, NULL);
-               freeException(mb->errors);
-               mb->errors = new;
+               mb->errors = concatErrors(mb->errors, msg);
        } else {
                mb->errors = dupError(msg);
        }
diff --git a/monetdb5/mal/mal_private.h b/monetdb5/mal/mal_private.h
--- a/monetdb5/mal/mal_private.h
+++ b/monetdb5/mal/mal_private.h
@@ -99,3 +99,8 @@ void mal_runtime_reset(void)
 
 char *dupError(const char *err)
        __attribute__((__visibility__("hidden"), __returns_nonnull__));
+
+char *concatErrors(char *err1, const char *err2)
+       __attribute__((__visibility__("hidden")))
+       __attribute__((__nonnull__(1, 2)))
+       __attribute__((__returns_nonnull__));
diff --git a/monetdb5/optimizer/opt_mergetable.c 
b/monetdb5/optimizer/opt_mergetable.c
--- a/monetdb5/optimizer/opt_mergetable.c
+++ b/monetdb5/optimizer/opt_mergetable.c
@@ -259,8 +259,8 @@ overlap(matlist_t *ml, int lv, int rv, i
 {
        int lpnr, rpnr;
 
-       checksize(ml, lv);
-       checksize(ml, rv);
+       if (checksize(ml, lv) || checksize(ml, rv))
+               return -1;
        lpnr = ml->torigin[lv];
        rpnr = (ontails)?ml->torigin[rv]:ml->horigin[rv];
 
@@ -307,8 +307,14 @@ mat_delta(matlist_t *ml, MalBlkPtr mb, I
                int nr = 1;
                for(k=1; k < mat[e].mi->argc; k++) {
                        for(j=1; j < mat[m].mi->argc; j++) {
-                               if (overlap(ml, getArg(mat[e].mi, k), 
getArg(mat[m].mi, j), k, j, 0)){
-                                       InstrPtr q = copyInstruction(p);
+                               switch (overlap(ml, getArg(mat[e].mi, k), 
getArg(mat[m].mi, j), k, j, 0)) {
+                                       InstrPtr q;
+                               case 0:
+                                       continue;
+                               case -1:
+                                       return NULL;
+                               case 1:
+                                       q = copyInstruction(p);
                                        if(!q){
                                                freeInstruction(r);
                                                return NULL;
@@ -338,6 +344,7 @@ mat_delta(matlist_t *ml, MalBlkPtr mb, I
                                        nr++;
                                        break;
                                }
+                               break;                  /* only in case of 
overlap */
                        }
                }
        } else {
@@ -676,9 +683,12 @@ mat_setop(MalBlkPtr mb, InstrPtr p, matl
 
                        ttpe = getArgType(mb, mat[n].mi, 0);
                        for (j=1; j<mat[n].mi->argc; j++) {
-                               if (getBatType(ttpe) != TYPE_oid || overlap(ml, 
getArg(mat[m].mi, k), getArg(mat[n].mi, j), k, j, 1)){
+                               int ov = 0;
+                               if (getBatType(ttpe) != TYPE_oid || (ov = 
overlap(ml, getArg(mat[m].mi, k), getArg(mat[n].mi, j), k, j, 1)) == 1){
                                        s = 
addArgument(mb,s,getArg(mat[n].mi,j));
                                }
+                               if (ov == -1)
+                                       return -1;
                        }
                        if (s->retc == 1 && s->argc == 2){ /* only one input, 
change into an assignment */
                                getFunctionId(s) = NULL;
@@ -751,8 +761,14 @@ mat_projection(MalBlkPtr mb, InstrPtr p,
                int nr = 1;
                for(k=1; k<mat[m].mi->argc; k++) {
                        for (j=1; j<mat[n].mi->argc; j++) {
-                               if (overlap(ml, getArg(mat[m].mi, k), 
getArg(mat[n].mi, j), k, j, 0)){
-                                       InstrPtr q = copyInstruction(p);
+                               switch (overlap(ml, getArg(mat[m].mi, k), 
getArg(mat[n].mi, j), k, j, 0)) {
+                                       InstrPtr q;
+                               case 0:
+                                       continue;
+                               case -1:
+                                       return -1;
+                               case 1:
+                                       q = copyInstruction(p);
 
                                        if(!q) {
                                                freeInstruction(r);
@@ -773,6 +789,7 @@ mat_projection(MalBlkPtr mb, InstrPtr p,
                                        nr++;
                                        break;
                                }
+                               break;                  /* only in case of 
overlap */
                        }
                }
        } else {
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to