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