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