Changeset: beb4978f2307 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=beb4978f2307 Modified Files: monetdb5/mal/mal_authorize.c monetdb5/mal/mal_listing.c monetdb5/mal/mal_profiler.c monetdb5/mal/mal_session.c monetdb5/modules/atoms/json.c monetdb5/modules/atoms/mtime.c monetdb5/modules/kernel/batcolor.c monetdb5/modules/mal/clients.c monetdb5/modules/mal/language.c monetdb5/modules/mal/mal_mapi.c monetdb5/modules/mal/wlc.c Branch: Mar2018 Log Message:
Coverity-inspired fixes. diffs (truncated from 308 to 300 lines): diff --git a/monetdb5/mal/mal_authorize.c b/monetdb5/mal/mal_authorize.c --- a/monetdb5/mal/mal_authorize.c +++ b/monetdb5/mal/mal_authorize.c @@ -183,9 +183,9 @@ AUTHinitTables(const char *passwd) { /* don't check this bat since we'll fix it below */ GDKdebug &= ~CHECKMASK; user = BATdescriptor(bid); + GDKdebug = dbg; if (user == NULL) throw(MAL, "initTables.user", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); - GDKdebug = dbg; isNew = 0; } assert(user); diff --git a/monetdb5/mal/mal_listing.c b/monetdb5/mal/mal_listing.c --- a/monetdb5/mal/mal_listing.c +++ b/monetdb5/mal/mal_listing.c @@ -80,6 +80,7 @@ renderTerm(MalBlkPtr mb, MalStkPtr stk, if( nbuf == 0){ GDKfree(buf); + GDKfree(cv); addMalException(mb,"renderTerm:Failed to allocate"); return NULL; } 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 @@ -342,7 +342,7 @@ This information can be used to determin tname = getTypeName(tpe); logadd("\"type\":\"%s\",%s", tname,pret); cv = VALformat(&stk->stk[getArg(pci,j)]); - stmtq = mal_quote(cv, strlen(cv)); + stmtq = cv ? mal_quote(cv, strlen(cv)) : NULL; if (stmtq != NULL && strlen(stmtq) > LOGLEN/2) { truncated = truncate_string(stmtq); GDKfree(stmtq); diff --git a/monetdb5/mal/mal_session.c b/monetdb5/mal/mal_session.c --- a/monetdb5/mal/mal_session.c +++ b/monetdb5/mal/mal_session.c @@ -158,12 +158,12 @@ MSinitClientPrg(Client cntxt, str mod, s if (cntxt->curprg && idcmp(nme, cntxt->curprg->name) == 0) return MSresetClientPrg(cntxt, putName(mod), putName(nme)); cntxt->curprg = newFunction(putName(mod), putName(nme), FUNCTIONsymbol); + if( cntxt->curprg == 0) + throw(MAL, "initClientPrg", SQLSTATE(HY001) MAL_MALLOC_FAIL); if( (idx= findVariable(cntxt->curprg->def,"main")) >=0) setVarType(cntxt->curprg->def, idx, TYPE_void); insertSymbol(cntxt->usermodule,cntxt->curprg); - if( cntxt->curprg == 0) - throw(MAL, "initClientPrg", SQLSTATE(HY001) MAL_MALLOC_FAIL); if (cntxt->glb == NULL ) cntxt->glb = newGlobalStack(MAXGLOBALS + cntxt->curprg->def->vsize); if( cntxt->glb == NULL) @@ -368,7 +368,7 @@ MSscheduleClient(str command, str challe if((msg = MSinitClientPrg(c, "user", "main")) != MAL_SUCCEED) { mnstr_printf(fout, "!could not allocate space\n"); exit_streams(fin, fout); - GDKfree(msg); + freeException(msg); GDKfree(command); return; } @@ -394,7 +394,12 @@ MSscheduleClient(str command, str challe c->compute_column_widths = compute_column_widths; mnstr_settimeout(c->fdin->s, 50, GDKexiting); - MSserveClient(c); + msg = MSserveClient(c); + if (msg != MAL_SUCCEED) { + mnstr_printf(fout, "!could not serve client\n"); + exit_streams(fin, fout); + freeException(msg); + } } /* 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 @@ -1741,6 +1741,7 @@ JSONrenderRowArray(BAT **bl, MalBlkPtr m snprintf(row + len, lim - len, "%s,", val ? val : "null"); len += l + 1; GDKfree(val); + val = NULL; } if (row[1]) row[len - 1] = ']'; @@ -1752,6 +1753,7 @@ JSONrenderRowArray(BAT **bl, MalBlkPtr m memfail: GDKfree(row); + GDKfree(val); return NULL; } diff --git a/monetdb5/modules/atoms/mtime.c b/monetdb5/modules/atoms/mtime.c --- a/monetdb5/modules/atoms/mtime.c +++ b/monetdb5/modules/atoms/mtime.c @@ -1396,6 +1396,7 @@ str MTIMEprelude(void *ret) { const char *msg = NULL; + char *err; ValRecord vr; int ticks; union lng_tzone ltz; @@ -1463,8 +1464,9 @@ MTIMEprelude(void *ret) TIMEZONES("Azore Islands", -1 * 60); TIMEZONES("Hawaii/USA", -10 * 60); TIMEZONES("American Samoa", -11 * 60); - MTIMErule_fromstr(&RULE_MAR, &s1); - MTIMErule_fromstr(&RULE_OCT, &s2); + if ((err = MTIMErule_fromstr(&RULE_MAR, &s1)) != MAL_SUCCEED || + (err = MTIMErule_fromstr(&RULE_OCT, &s2)) != MAL_SUCCEED) + return err; TIMEZONES2("Kazakhstan", 6 * 60, RULE_MAR, RULE_OCT); TIMEZONES2("Moscow/Russia", 3 * 60, RULE_MAR, RULE_OCT); TIMEZONES2("East/Europe", 2 * 60, RULE_MAR, RULE_OCT); diff --git a/monetdb5/modules/kernel/batcolor.c b/monetdb5/modules/kernel/batcolor.c --- a/monetdb5/modules/kernel/batcolor.c +++ b/monetdb5/modules/kernel/batcolor.c @@ -28,6 +28,7 @@ str CLRbat##NAME(bat *ret, const bat *l) BUN p,q; \ const TYPE1 *x; \ TYPE2 y, *yp = &y; \ + char *msg = MAL_SUCCEED; \ \ if( (b= BATdescriptor(*l)) == NULL ) \ throw(MAL, "batcolor." #NAME, SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); \ @@ -49,8 +50,8 @@ str CLRbat##NAME(bat *ret, const bat *l) y = (TYPE2) TYPE2##_nil; \ bn->tnonil = 0; \ bn->tnil = 1; \ - } else \ - FUNC(yp,x); \ + } else if ((msg = FUNC(yp,x)) != MAL_SUCCEED) \ + goto bunins_failed; \ bunfastapp(bn, yp); \ } \ *ret = bn->batCacheid; \ @@ -60,6 +61,8 @@ str CLRbat##NAME(bat *ret, const bat *l) bunins_failed: \ BBPunfix(b->batCacheid); \ BBPunfix(bn->batCacheid); \ + if (msg) \ + return msg; \ throw(MAL, "batcolor." #NAME, OPERATION_FAILED " During bulk operation"); \ } @@ -90,6 +93,7 @@ str CLRbat##NAME(bat *ret, const bat *l, BUN p,q; \ const TYPE *x, *x2, *x3; \ color y, *yp = &y; \ + char *msg = MAL_SUCCEED; \ \ b= BATdescriptor(*l); \ b2= BATdescriptor(*bid2); \ @@ -129,8 +133,8 @@ str CLRbat##NAME(bat *ret, const bat *l, y = color_nil; \ bn->tnonil = 0; \ bn->tnil = 1; \ - } else \ - FUNC(yp,x,x2,x3); \ + } else if ((msg = FUNC(yp,x,x2,x3)) != MAL_SUCCEED) \ + goto bunins_failed; \ bunfastapp(bn, yp); \ } \ *ret = bn->batCacheid; \ @@ -144,6 +148,8 @@ bunins_failed: \ BBPunfix(b2->batCacheid); \ BBPunfix(b3->batCacheid); \ BBPunfix(bn->batCacheid); \ + if (msg) \ + return msg; \ throw(MAL, "batcolor." #NAME, OPERATION_FAILED " During bulk operation"); \ } diff --git a/monetdb5/modules/mal/clients.c b/monetdb5/modules/mal/clients.c --- a/monetdb5/modules/mal/clients.c +++ b/monetdb5/modules/mal/clients.c @@ -454,6 +454,8 @@ str CLTsha2sum(str *ret, str *pw, int *b str CLTbackendsum(str *ret, str *pw) { char *mret = mcrypt_BackendSum(*pw, strlen(*pw)); + if (mret == NULL) + throw(MAL, "clients.backendsum", SQLSTATE(HY001) MAL_MALLOC_FAIL); *ret = GDKstrdup(mret); free(mret); if(*ret == NULL) diff --git a/monetdb5/modules/mal/language.c b/monetdb5/modules/mal/language.c --- a/monetdb5/modules/mal/language.c +++ b/monetdb5/modules/mal/language.c @@ -187,7 +187,7 @@ CMDregisterFunction(Client cntxt, MalBlk str msg, fcnName, modName, ahelp; msg= compileString(&sym, cntxt,*code); - if( sym) { + if( msg == MAL_SUCCEED) { assert(cntxt->usermodule); //mnstr_printf(cntxt->fdout,"#register FUNCTION %s.%s\n", //getModuleId(sym->def->stmt[0]), getFunctionId(sym->def->stmt[0])); @@ -200,8 +200,7 @@ CMDregisterFunction(Client cntxt, MalBlk GDKfree(ahelp); throw(MAL, "language.register", SQLSTATE(HY001) MAL_MALLOC_FAIL); } - if( help) - mb->help= ahelp; + mb->help= ahelp; sig= getSignature(sym); sym->name= fcnName; setModuleId(sig, modName); 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 @@ -590,6 +590,10 @@ SERVERlisten(int *Port, str *Usockfile, } else { #ifdef HAVE_SYS_UN_H usockfile = GDKstrdup(*Usockfile); + if (usockfile == NULL) { + GDKfree(psock); + throw(MAL,"mal_mapi.listen", SQLSTATE(HY001) MAL_MALLOC_FAIL); + } #else usockfile = NULL; GDKfree(psock); @@ -606,8 +610,7 @@ SERVERlisten(int *Port, str *Usockfile, if (port > 65535) { GDKfree(psock); - if (usockfile) - GDKfree(usockfile); + GDKfree(usockfile); throw(ILLARG, "mal_mapi.listen", OPERATION_FAILED ": port number should be between 1 and 65535"); } @@ -619,8 +622,7 @@ SERVERlisten(int *Port, str *Usockfile, , 0); if (sock == INVALID_SOCKET) { GDKfree(psock); - if (usockfile) - GDKfree(usockfile); + GDKfree(usockfile); throw(IO, "mal_mapi.listen", OPERATION_FAILED ": creation of stream socket failed: %s", #ifdef _MSC_VER @@ -641,8 +643,7 @@ SERVERlisten(int *Port, str *Usockfile, const char *err = strerror(errno); #endif GDKfree(psock); - if (usockfile) - GDKfree(usockfile); + GDKfree(usockfile); closesocket(sock); throw(IO, "mal_mapi.listen", OPERATION_FAILED ": setsockptr failed %s", err); } @@ -675,8 +676,7 @@ SERVERlisten(int *Port, str *Usockfile, } closesocket(sock); GDKfree(psock); - if (usockfile) - GDKfree(usockfile); + GDKfree(usockfile); throw(IO, "mal_mapi.listen", OPERATION_FAILED ": bind to stream socket port %d " "failed: %s", port, @@ -694,8 +694,7 @@ SERVERlisten(int *Port, str *Usockfile, if (getsockname(sock, (SOCKPTR) &server, &length) == SOCKET_ERROR) { closesocket(sock); GDKfree(psock); - if (usockfile) - GDKfree(usockfile); + GDKfree(usockfile); throw(IO, "mal_mapi.listen", OPERATION_FAILED ": failed getting socket name: %s", #ifdef _MSC_VER @@ -708,8 +707,7 @@ SERVERlisten(int *Port, str *Usockfile, if(listen(sock, maxusers) == SOCKET_ERROR) { closesocket(sock); GDKfree(psock); - if (usockfile) - GDKfree(usockfile); + GDKfree(usockfile); throw(IO, "mal_mapi.listen", OPERATION_FAILED ": failed to set socket to listen %s", #ifdef _MSC_VER @@ -764,6 +762,7 @@ SERVERlisten(int *Port, str *Usockfile, if(remove(usockfile) == -1 && errno != ENOENT) { char *e = createException(IO, "mal_mapi.listen", OPERATION_FAILED ": remove UNIX socket file"); closesocket(usock); + GDKfree(usockfile); GDKfree(psock); return e; } diff --git a/monetdb5/modules/mal/wlc.c b/monetdb5/modules/mal/wlc.c --- a/monetdb5/modules/mal/wlc.c +++ b/monetdb5/modules/mal/wlc.c @@ -460,7 +460,8 @@ WLCsettime(Client cntxt, InstrPtr pci, I clk = clock.tv_sec; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list