Changeset: ce2abd8801fc for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/ce2abd8801fc Modified Files: monetdb5/mal/mal_embedded.c monetdb5/mal/mal_prelude.c monetdb5/mal/mal_profiler.c monetdb5/modules/atoms/blob.c monetdb5/modules/atoms/uuid.c monetdb5/modules/kernel/batmmath.c monetdb5/modules/mal/mal_mapi.c monetdb5/optimizer/opt_bincopyfrom.c monetdb5/optimizer/opt_for.c monetdb5/optimizer/opt_remoteQueries.c tools/monetdbe/monetdbe.c Branch: Jan2022 Log Message:
Coverity inspired fixes. diffs (truncated from 438 to 300 lines): diff --git a/monetdb5/mal/mal_embedded.c b/monetdb5/mal/mal_embedded.c --- a/monetdb5/mal/mal_embedded.c +++ b/monetdb5/mal/mal_embedded.c @@ -67,6 +67,7 @@ malEmbeddedBoot(int workerlimit, int mem GDKgetenv("monet_vault_key"), strerror(errno)); } len = fread(secret, 1, sizeof(secret), secretf); + fclose(secretf); secret[len] = '\0'; len = strlen(secret); /* secret can contain null-bytes */ if (len == 0) { @@ -76,7 +77,6 @@ malEmbeddedBoot(int workerlimit, int mem "#warning: your vault key is too short " "(%zu), enlarge your vault key!\n", len); } - fclose(secretf); } if ((msg = AUTHunlockVault(secretp)) != MAL_SUCCEED) { /* don't show this as a crash */ 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 @@ -225,11 +225,13 @@ addFunctions(mel_func *fcn){ if ( s == NULL) throw(LOADER, "addFunctions", "Can not create symbol for %s.%s missing", fcn->mod, fcn->fcn); mb = s->def; - if( mb == NULL) + if( mb == NULL) { + freeSymbol(s); throw(LOADER, "addFunctions", "Can not create program block for %s.%s missing", fcn->mod, fcn->fcn); + } if (fcn->cname && fcn->cname[0]) - strcpy(mb->binding, fcn->cname); + strcpy_len(mb->binding, fcn->cname, sizeof(mb->binding)); /* keep the comment around, setting the static avoid freeing the string accidentally , saving on duplicate documentation in the code. */ mb->statichelp = mb->help = fcn->comment; @@ -240,7 +242,7 @@ addFunctions(mel_func *fcn){ sig->fcn = (MALfcn)fcn->imp; if( fcn->unsafe) mb->unsafeProp = 1; - + /* add the return variables */ if(fcn->retc == 0){ int idx = newTmpVariable(mb, TYPE_void); @@ -340,7 +342,7 @@ melFunction(bool command, const char *mo mb = s->def; (void)comment; if (fname) - strcpy(mb->binding, fname); + strcpy_len(mb->binding, fname, sizeof(mb->binding)); if (mb == NULL) { freeSymbol(s); return MEL_ERR; diff --git a/monetdb5/mal/mal_profiler.c b/monetdb5/mal/mal_profiler.c --- a/monetdb5/mal/mal_profiler.c +++ b/monetdb5/mal/mal_profiler.c @@ -112,6 +112,7 @@ static inline void logdel(struct logbuf *logbuf) { free(logbuf->logbuffer); + logbuf->logbuffer = NULL; } static bool logadd(struct logbuf *logbuf, @@ -669,7 +670,7 @@ openProfilerStream(Client cntxt) // Ignore the JSON rendering mode, use compiled time version /* show all in progress instructions for stethoscope startup */ - /* wait a short time for instructions to finish updating there thread admin + /* wait a short time for instructions to finish updating their thread admin * and then follow the locking scheme */ MT_sleep_ms(200); diff --git a/monetdb5/modules/atoms/blob.c b/monetdb5/modules/atoms/blob.c --- a/monetdb5/modules/atoms/blob.c +++ b/monetdb5/modules/atoms/blob.c @@ -247,17 +247,14 @@ BLOBnitems_bulk(Client cntxt, MalBlkPtr } bat_iterator_end(&bi); -bailout: - if (bn && !msg) { - BATsetcount(bn, q); - bn->tnil = nils; - bn->tnonil = !nils; - bn->tkey = BATcount(bn) <= 1; - bn->tsorted = BATcount(bn) <= 1; - bn->trevsorted = BATcount(bn) <= 1; - BBPkeepref(*res = bn->batCacheid); - } else if (bn) - BBPreclaim(bn); + BATsetcount(bn, q); + bn->tnil = nils; + bn->tnonil = !nils; + bn->tkey = BATcount(bn) <= 1; + bn->tsorted = BATcount(bn) <= 1; + bn->trevsorted = BATcount(bn) <= 1; + BBPkeepref(*res = bn->batCacheid); + bailout: if (b) BBPunfix(b->batCacheid); if (bs) diff --git a/monetdb5/modules/atoms/uuid.c b/monetdb5/modules/atoms/uuid.c --- a/monetdb5/modules/atoms/uuid.c +++ b/monetdb5/modules/atoms/uuid.c @@ -121,8 +121,7 @@ UUIDgenerateUuidInt_bulk(Client cntxt, M if (isaBatType(getArgType(mb, pci, 1))) { bat *bid = getArgReference_bat(stk, pci, 1); if (!(b = BBPquickdesc(*bid))) { - msg = createException(MAL, "uuid.generateuuidint_bulk", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); - goto bailout; + throw(MAL, "uuid.generateuuidint_bulk", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); } n = BATcount(b); } else { @@ -130,8 +129,7 @@ UUIDgenerateUuidInt_bulk(Client cntxt, M } if ((bn = COLnew(b ? b->hseqbase : 0, TYPE_uuid, n, TRANSIENT)) == NULL) { - msg = createException(MAL, "uuid.generateuuidint_bulk", SQLSTATE(HY013) MAL_MALLOC_FAIL); - goto bailout; + throw(MAL, "uuid.generateuuidint_bulk", SQLSTATE(HY013) MAL_MALLOC_FAIL); } bnt = Tloc(bn, 0); for (BUN i = 0 ; i < n ; i++) @@ -142,12 +140,7 @@ UUIDgenerateUuidInt_bulk(Client cntxt, M bn->tsorted = n <= 1; bn->trevsorted = n <= 1; bn->tkey = n <= 1; - -bailout: - if (msg && bn) - BBPreclaim(bn); - else if (bn) - BBPkeepref(*ret = bn->batCacheid); + BBPkeepref(*ret = bn->batCacheid); return msg; } 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 @@ -383,7 +383,6 @@ CMDscience_bat_randintarg(Client cntxt, BAT *bn = NULL, *b = NULL, *bs = NULL; BUN q = 0; int *restrict vals; - str msg = MAL_SUCCEED; struct canditer ci = {0}; bat *res = getArgReference_bat(stk, pci, 0); @@ -391,12 +390,10 @@ CMDscience_bat_randintarg(Client cntxt, if (isaBatType(getArgType(mb, pci, 1))) { bat *bid = getArgReference_bat(stk, pci, 1), *sid = pci->argc == 3 ? getArgReference_bat(stk, pci, 2) : NULL; if (!(b = BBPquickdesc(*bid))) { - msg = createException(MAL, "batmmath.rand", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); - goto bailout; + throw(MAL, "batmmath.rand", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); } if (sid && !is_bat_nil(*sid) && !(bs = BATdescriptor(*sid))) { - msg = createException(MAL, "batmmath.rand", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); - goto bailout; + throw(MAL, "batmmath.rand", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); } q = canditer_init(&ci, b, bs); if (bs) @@ -406,8 +403,7 @@ CMDscience_bat_randintarg(Client cntxt, } if (!(bn = COLnew(ci.hseq, TYPE_int, q, TRANSIENT))) { - msg = createException(MAL, "batmmath.rand", SQLSTATE(HY013) MAL_MALLOC_FAIL); - goto bailout; + throw(MAL, "batmmath.rand", SQLSTATE(HY013) MAL_MALLOC_FAIL); } vals = Tloc(bn, 0); @@ -421,18 +417,14 @@ CMDscience_bat_randintarg(Client cntxt, MT_lock_unset(&mmath_rse_lock); #endif -bailout: - if (bn && !msg) { - BATsetcount(bn, q); - bn->tnil = false; - bn->tnonil = true; - bn->tkey = BATcount(bn) <= 1; - bn->tsorted = BATcount(bn) <= 1; - bn->trevsorted = BATcount(bn) <= 1; - BBPkeepref(*res = bn->batCacheid); - } else if (bn) - BBPreclaim(bn); - return msg; + BATsetcount(bn, q); + bn->tnil = false; + bn->tnonil = true; + bn->tkey = BATcount(bn) <= 1; + bn->tsorted = BATcount(bn) <= 1; + bn->trevsorted = BATcount(bn) <= 1; + BBPkeepref(*res = bn->batCacheid); + return MAL_SUCCEED; } scienceImpl(acos) diff --git a/monetdb5/modules/mal/mal_mapi.c b/monetdb5/modules/mal/mal_mapi.c --- a/monetdb5/modules/mal/mal_mapi.c +++ b/monetdb5/modules/mal/mal_mapi.c @@ -1051,6 +1051,9 @@ SERVERconnectAll(Client cntxt, int *key, mid = mapi_connect(*host, *port, *username, *password, *lang, NULL); + if (mid == NULL) + throw(IO, "mapi.connect", MAL_MALLOC_FAIL); + if (mapi_error(mid)) { const char *err = mapi_error_str(mid); str ex; diff --git a/monetdb5/optimizer/opt_bincopyfrom.c b/monetdb5/optimizer/opt_bincopyfrom.c --- a/monetdb5/optimizer/opt_bincopyfrom.c +++ b/monetdb5/optimizer/opt_bincopyfrom.c @@ -43,7 +43,7 @@ OPTbincopyfromImplementation(Client cntx old_mb_stmt = mb->stmt; old_ssize = mb->ssize; old_stop = mb->stop; - if (newMalBlkStmt(mb, mb->stop + getInstrPtr(mb, found_at)->argc) < 0) + if (newMalBlkStmt(mb, mb->stop + getInstrPtr(mb, found_at)->argc) < 0) throw(MAL, "optimizer.bincopyfrom", SQLSTATE(HY013) MAL_MALLOC_FAIL); for (size_t i = 0; i < old_stop; i++) { @@ -174,7 +174,7 @@ extract_column(MalBlkPtr mb, InstrPtr ol InstrPtr p = newFcnCall(mb, sqlRef, importColumnRef); setReturnArgument(p, old->argv[idx]); int new_count_var = newTmpVariable(mb, TYPE_oid); - pushReturn(mb, p, new_count_var); + p = pushReturn(mb, p, new_count_var); p = pushStr(mb, p, method); p = pushBit(mb, p, byteswap); p = pushStr(mb, p, path); diff --git a/monetdb5/optimizer/opt_for.c b/monetdb5/optimizer/opt_for.c --- a/monetdb5/optimizer/opt_for.c +++ b/monetdb5/optimizer/opt_for.c @@ -129,8 +129,8 @@ OPTforImplementation(Client cntxt, MalBl InstrPtr q = newInstructionArgs(mb, calcRef, minusRef, 3); int tpe = getVarType(mb, getArg(p,3)); getArg(q, 0) = newTmpVariable(mb, tpe); - addArgument(mb, q, getArg(p, 3)); - addArgument(mb, q, varforvalue[k]); + q = addArgument(mb, q, getArg(p, 3)); + q = addArgument(mb, q, varforvalue[k]); pushInstruction(mb,q); InstrPtr r; @@ -140,7 +140,7 @@ OPTforImplementation(Client cntxt, MalBl else r = newInstructionArgs(mb, calcRef, putName("sht"), 2); getArg(r, 0) = newTmpVariable(mb, tpe); - addArgument(mb, r, getArg(q, 0)); + r = addArgument(mb, r, getArg(q, 0)); pushInstruction(mb,r); q = copyInstruction(p); @@ -153,15 +153,15 @@ OPTforImplementation(Client cntxt, MalBl InstrPtr r = newInstructionArgs(mb, dictRef, selectRef, 10); getArg(r, 0) = getArg(p, 0); - addArgument(mb, r, varisdict[k]); - addArgument(mb, r, getArg(p, 2)); /* cand */ - addArgument(mb, r, vardictvalue[k]); - addArgument(mb, r, getArg(p, 3)); /* l */ - addArgument(mb, r, getArg(p, 4)); /* h */ - addArgument(mb, r, getArg(p, 5)); /* li */ - addArgument(mb, r, getArg(p, 6)); /* hi */ - addArgument(mb, r, getArg(p, 7)); /* anti */ - addArgument(mb, r, getArg(p, 8)); /* unknown */ + r = addArgument(mb, r, varisdict[k]); + r = addArgument(mb, r, getArg(p, 2)); /* cand */ + r = addArgument(mb, r, vardictvalue[k]); + r = addArgument(mb, r, getArg(p, 3)); /* l */ + r = addArgument(mb, r, getArg(p, 4)); /* h */ + r = addArgument(mb, r, getArg(p, 5)); /* li */ + r = addArgument(mb, r, getArg(p, 6)); /* hi */ + r = addArgument(mb, r, getArg(p, 7)); /* anti */ + r = addArgument(mb, r, getArg(p, 8)); /* unknown */ pushInstruction(mb,r); } else { /* pos = select(col, cand, l, h, ...) with col = dict.decompress(o,u) @@ -179,14 +179,14 @@ OPTforImplementation(Client cntxt, MalBl int tpe = getVarType(mb, varisdict[k]); InstrPtr s = newInstructionArgs(mb, dictRef, putName("convert"), 3); getArg(s, 0) = newTmpVariable(mb, tpe); - addArgument(mb, s, getArg(r, 0)); + s = addArgument(mb, s, getArg(r, 0)); pushInstruction(mb,s); InstrPtr t = newInstructionArgs(mb, algebraRef, intersectRef, 9); getArg(t, 0) = getArg(p, 0); - addArgument(mb, t, varisdict[k]); - addArgument(mb, t, getArg(s, 0)); - addArgument(mb, t, cand); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list