Changeset: b009cad15c3e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b009cad15c3e
Modified Files:
        monetdb5/mal/mal_client.c
        monetdb5/mal/mal_module.c
        monetdb5/mal/mal_prelude.c
        monetdb5/modules/atoms/json.c
        monetdb5/modules/kernel/batmmath.c
        monetdb5/modules/kernel/batstr.c
        monetdb5/modules/mal/batcalc.c
        monetdb5/modules/mal/orderidx.c
        monetdb5/optimizer/opt_macro.c
        tools/merovingian/daemon/forkmserver.c
Branch: Oct2020
Log Message:

Coverity inspired fixes.


diffs (truncated from 360 to 300 lines):

diff --git a/monetdb5/mal/mal_client.c b/monetdb5/mal/mal_client.c
--- a/monetdb5/mal/mal_client.c
+++ b/monetdb5/mal/mal_client.c
@@ -71,7 +71,10 @@ MCinit(void)
                maxclients = atoi(max_clients);
        if (maxclients <= 0) {
                maxclients = 64;
-               GDKsetenv("max_clients", "64");
+               if (GDKsetenv("max_clients", "64") != GDK_SUCCEED) {
+                       TRC_CRITICAL(MAL_SERVER, "Initialization failed: " 
MAL_MALLOC_FAIL "\n");
+                       return false;
+               }
        }
 
        MAL_MAXCLIENTS = /* client connections */ maxclients;
diff --git a/monetdb5/mal/mal_module.c b/monetdb5/mal/mal_module.c
--- a/monetdb5/mal/mal_module.c
+++ b/monetdb5/mal/mal_module.c
@@ -42,8 +42,8 @@ findFunctionImplementation(const char *c
                                Symbol s;
                                if ((s = moduleIndex[i]->space[j]) != NULL) {
                                        do {
-                                               if (strcmp(s->def->binding, 
cname) == 0 &&
-                                                       s->def &&
+                                               if (s->def &&
+                                                       strcmp(s->def->binding, 
cname) == 0 &&
                                                        s->def->stmt &&
                                                        s->def->stmt[0] &&
                                                        s->def->stmt[0]->fcn) {
diff --git a/monetdb5/mal/mal_prelude.c b/monetdb5/mal/mal_prelude.c
--- a/monetdb5/mal/mal_prelude.c
+++ b/monetdb5/mal/mal_prelude.c
@@ -334,8 +334,10 @@ melFunction(bool command, char *mod, cha
        (void)comment;
        if (fname)
                strcpy(mb->binding, fname);
-       if( mb == NULL)
+       if (mb == NULL) {
+               freeSymbol(s);
                return MEL_ERR;
+       }
        sig = newInstruction(mb, mod, fcn);
        sig->retc = 0;
        sig->argc = 0;
@@ -347,16 +349,22 @@ melFunction(bool command, char *mod, cha
        if(retc == 0) {
                idx = newTmpVariable(mb, TYPE_void);
                sig = pushReturn(mb, sig, idx);
-               if (sig == NULL)
+               if (idx < 0 || sig == NULL) {
+                       freeInstruction(sig);
+                       freeSymbol(s);
                        return MEL_ERR;
+               }
        }
 
        for (i = 0; i<retc; i++ ){
                mel_func_arg a = va_arg(va, mel_func_arg);
                idx = makeFuncArgument(mb, &a);
                sig = pushReturn(mb, sig, idx);
-               if (sig == NULL)
+               if (idx < 0 || sig == NULL) {
+                       freeInstruction(sig);
+                       freeSymbol(s);
                        return MEL_ERR;
+               }
                int tpe = TYPE_any;
                if (a.nr > 0) {
                        if (a.isbat)
@@ -373,8 +381,11 @@ melFunction(bool command, char *mod, cha
                mel_func_arg a = va_arg(va, mel_func_arg);
                idx = makeFuncArgument(mb, &a);
                sig = pushArgument(mb, sig, idx);
-               if (sig == NULL)
+               if (idx < 0 || sig == NULL) {
+                       freeInstruction(sig);
+                       freeSymbol(s);
                        return MEL_ERR;
+               }
                int tpe = TYPE_any;
                if (a.nr > 0) {
                        if (a.isbat)
diff --git a/monetdb5/modules/atoms/json.c b/monetdb5/modules/atoms/json.c
--- a/monetdb5/modules/atoms/json.c
+++ b/monetdb5/modules/atoms/json.c
@@ -1417,7 +1417,8 @@ JSONjson2number(dbl *ret, json *js)
 {
        dbl val = 0;
        dbl *val_ptr = &val;
-       JSONjson2numberInternal((void **)&val_ptr, js, strtod_wrapper);
+       str tmp;
+       rethrow(__func__, tmp, JSONjson2numberInternal((void **)&val_ptr, js, 
strtod_wrapper));
 
        if (val_ptr == NULL) {
                *ret = dbl_nil;
@@ -1434,8 +1435,9 @@ JSONjson2integer(lng *ret, json *js)
 {
        lng val = 0;
        lng *val_ptr = &val;
+       str tmp;
 
-       JSONjson2numberInternal((void **)&val_ptr, js, strtol_wrapper);
+       rethrow(__func__, tmp, JSONjson2numberInternal((void **)&val_ptr, js, 
strtol_wrapper));
        if (val_ptr == NULL) {
                *ret = lng_nil;
        }
diff --git a/monetdb5/modules/kernel/batmmath.c 
b/monetdb5/modules/kernel/batmmath.c
--- a/monetdb5/modules/kernel/batmmath.c
+++ b/monetdb5/modules/kernel/batmmath.c
@@ -338,8 +338,10 @@ CMDscienceBINARY(MalStkPtr stk, InstrPtr
                BBPunfix(b1->batCacheid);
        if (b2)
                BBPunfix(b2->batCacheid);
+/* cannot happen
        if (s1)
                BBPunfix(s1->batCacheid);
+*/
        if (s2)
                BBPunfix(s2->batCacheid);
        throw(MAL, malfunc, SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
diff --git a/monetdb5/modules/kernel/batstr.c b/monetdb5/modules/kernel/batstr.c
--- a/monetdb5/modules/kernel/batstr.c
+++ b/monetdb5/modules/kernel/batstr.c
@@ -1526,7 +1526,7 @@ STRbatsplitpart(bat *ret, const bat *l, 
                str x = (str) BUNtvar(lefti,p);
                str needle = (str) BUNtvar(arg2i,p);
 
-               if ((err = STRsplitpart(&y, &x, &needle, &(fieldi[p]))) != 
MAL_SUCCEED)
+               if ((err = STRsplitpart(&y, &x, &needle, &fieldi[p])) != 
MAL_SUCCEED)
                        goto bailout;
                if (bunfastappVAR(bn, y) != GDK_SUCCEED) {
                        GDKfree(y);
@@ -1537,6 +1537,7 @@ STRbatsplitpart(bat *ret, const bat *l, 
                        bn->tnil = true;
                }
                GDKfree(y);
+               y = NULL;
        }
 
 bailout:
diff --git a/monetdb5/modules/mal/batcalc.c b/monetdb5/modules/mal/batcalc.c
--- a/monetdb5/modules/mal/batcalc.c
+++ b/monetdb5/modules/mal/batcalc.c
@@ -370,8 +370,10 @@ bailout:
                BBPunfix(b1->batCacheid);
        if (b2)
                BBPunfix(b2->batCacheid);
+/* cannot happen
        if (s1)
                BBPunfix(s1->batCacheid);
+*/
        if (s2)
                BBPunfix(s2->batCacheid);
        throw(MAL, malfunc, SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
@@ -479,8 +481,10 @@ bailout:
                BBPunfix(b1->batCacheid);
        if (b2)
                BBPunfix(b2->batCacheid);
+/* cannot happen
        if (s1)
                BBPunfix(s1->batCacheid);
+*/
        if (s2)
                BBPunfix(s2->batCacheid);
        throw(MAL, malfunc, SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
@@ -565,8 +569,10 @@ bailout:
                BBPunfix(b1->batCacheid);
        if (b2)
                BBPunfix(b2->batCacheid);
+/* cannot happen
        if (s1)
                BBPunfix(s1->batCacheid);
+*/
        if (s2)
                BBPunfix(s2->batCacheid);
        throw(MAL, malfunc, SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
@@ -988,8 +994,10 @@ CMDbatBETWEEN(Client cntxt, MalBlkPtr mb
                BBPunfix(s->batCacheid);
        if (slo)
                BBPunfix(slo->batCacheid);
+/* cannot happen
        if (shi)
                BBPunfix(shi->batCacheid);
+*/
        throw(MAL, "batcalc.between", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING);
 }
 
diff --git a/monetdb5/modules/mal/orderidx.c b/monetdb5/modules/mal/orderidx.c
--- a/monetdb5/modules/mal/orderidx.c
+++ b/monetdb5/modules/mal/orderidx.c
@@ -95,33 +95,50 @@ OIDXcreateImplementation(Client cntxt, i
        /* create a temporary MAL function to sort the BAT in parallel */
        snprintf(name, IDLENGTH, "sort%d", rand()%1000);
        snew = newFunction(putName("user"), putName(name),
-              FUNCTIONsymbol);
+                                          FUNCTIONsymbol);
        if(snew == NULL) {
                msg = createException(MAL, "bat.orderidx", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
                goto bailout;
        }
        smb = snew->def;
        q = getInstrPtr(smb, 0);
-       arg = newTmpVariable(smb, tpe);
+       if ((arg = newTmpVariable(smb, tpe)) < 0) {
+               msg = createException(MAL, "bat.orderidx", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
+               goto bailout;
+       }
        q= addArgument(smb, q, arg);
-       getArg(q,0) = newTmpVariable(smb, TYPE_void);
+       if (q == NULL || (getArg(q,0) = newTmpVariable(smb, TYPE_void)) < 0) {
+               msg = createException(MAL, "bat.orderidx", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
+               goto bailout;
+       }
 
        if( resizeMalBlk(smb, 2*pieces+10) < 0)
                goto bailout; // large enough
        /* create the pack instruction first, as it will hold
         * intermediate variables */
        pack = newInstruction(0, putName("bat"), putName("orderidx"));
-       if(pack == NULL) {
+       if (pack == NULL || (pack->argv[0] = newTmpVariable(smb, TYPE_void)) < 
0) {
+               msg = createException(MAL, "bat.orderidx", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
+               goto bailout;
+       }
+       pack = addArgument(smb, pack, arg);
+       if (pack == NULL) {
                msg = createException(MAL, "bat.orderidx", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
                goto bailout;
        }
-       pack->argv[0] = newTmpVariable(smb, TYPE_void);
-       pack = addArgument(smb, pack, arg);
        setVarFixed(smb, getArg(pack, 0));
 
        /* the costly part executed as a parallel block */
-       loopvar = newTmpVariable(smb, TYPE_bit);
+       if ((loopvar = newTmpVariable(smb, TYPE_bit)) < 0) {
+               msg = createException(MAL, "bat.orderidx", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
+               goto bailout;
+       }
        q = newStmt(smb, putName("language"), putName("dataflow"));
+       if (q == NULL) {
+               freeInstruction(pack);
+               msg = createException(MAL, "bat.orderidx", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
+               goto bailout;
+       }
        q->barrier = BARRIERsymbol;
        q->argv[0] = loopvar;
 
@@ -131,10 +148,20 @@ OIDXcreateImplementation(Client cntxt, i
        for (i = 0; i < pieces; i++) {
                /* add slice instruction */
                q = newInstruction(smb, putName("algebra"),putName("slice"));
-               setDestVar(q, newTmpVariable(smb, TYPE_any));
+               if (q == NULL || (setDestVar(q, newTmpVariable(smb, TYPE_any))) 
< 0) {
+                       freeInstruction(q);
+                       freeInstruction(pack);
+                       msg = createException(MAL, "bat.orderidx", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+                       goto bailout;
+               }
                setVarType(smb, getArg(q,0), tpe);
                setVarFixed(smb, getArg(q,0));
                q = addArgument(smb, q, arg);
+               if (q == NULL) {
+                       freeInstruction(pack);
+                       msg = createException(MAL, "bat.orderidx", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+                       goto bailout;
+               }
                pack = addArgument(smb, pack, getArg(q,0));
                q = pushOid(smb, q, o);
                if (i == pieces-1) {
@@ -143,16 +170,31 @@ OIDXcreateImplementation(Client cntxt, i
                        o += step;
                }
                q = pushOid(smb, q, o - 1);
+               if (q == NULL) {
+                       freeInstruction(pack);
+                       msg = createException(MAL, "bat.orderidx", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+                       goto bailout;
+               }
                pushInstruction(smb, q);
        }
        for (i = 0; i < pieces; i++) {
                /* add sort instruction */
                q = newInstruction(smb, putName("algebra"), 
putName("orderidx"));
-               setDestVar(q, newTmpVariable(smb, TYPE_any));
+               if (q == NULL || (setDestVar(q, newTmpVariable(smb, TYPE_any))) 
< 0) {
+                       freeInstruction(q);
+                       freeInstruction(pack);
+                       msg = createException(MAL, "bat.orderidx", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+                       goto bailout;
+               }
                setVarType(smb, getArg(q, 0), tpe);
                setVarFixed(smb, getArg(q, 0));
                q = addArgument(smb, q, pack->argv[2+i]);
                q = pushBit(smb, q, 1);
+               if (q == NULL) {
+                       freeInstruction(pack);
+                       msg = createException(MAL, "bat.orderidx", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+                       goto bailout;
+               }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to