Changeset: a7ee277f815a for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a7ee277f815a
Modified Files:
        monetdb5/extras/rapi/rapi.c
        monetdb5/mal/mal_builder.c
        monetdb5/mal/mal_client.c
        monetdb5/mal/mal_import.c
        monetdb5/mal/mal_listing.c
        monetdb5/mal/mal_profiler.c
        monetdb5/mal/mal_recycle.c
        monetdb5/mal/mal_resolve.c
        monetdb5/mal/mal_resource.c
        monetdb5/mal/mal_resource.h
        monetdb5/mal/mal_runtime.c
        monetdb5/modules/atoms/json.c
        monetdb5/modules/atoms/str.c
        monetdb5/modules/kernel/batstr.c
        monetdb5/modules/mal/inspect.c
        monetdb5/modules/mal/mal_io.c
        monetdb5/modules/mal/sysmon.c
        monetdb5/modules/mal/tablet.c
        monetdb5/modules/mal/tokenizer.c
        monetdb5/optimizer/opt_mergetable.c
        monetdb5/optimizer/opt_pushselect.c
Branch: Jun2016
Log Message:

Coverity found some bugs...


diffs (truncated from 1220 to 300 lines):

diff --git a/monetdb5/extras/rapi/rapi.c b/monetdb5/extras/rapi/rapi.c
--- a/monetdb5/extras/rapi/rapi.c
+++ b/monetdb5/extras/rapi/rapi.c
@@ -394,6 +394,7 @@ str RAPIeval(Client cntxt, MalBlkPtr mb,
                }
                msg = createException(MAL, "rapi.eval",
                                                          "Error running R 
expression: %s", errormsg);
+               free(errormsg);
                goto wrapup;
        }
 
diff --git a/monetdb5/mal/mal_builder.c b/monetdb5/mal/mal_builder.c
--- a/monetdb5/mal/mal_builder.c
+++ b/monetdb5/mal/mal_builder.c
@@ -391,6 +391,7 @@ pushHge(MalBlkPtr mb, InstrPtr q, hge va
 
        cst.vtype= TYPE_hge;
        cst.val.hval= val;
+       cst.len = 0;
        _t = defConstant(mb,TYPE_hge,&cst);
        return pushArgument(mb, q, _t);
 }
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
@@ -251,7 +251,11 @@ MCinitClientRecord(Client c, oid user, b
        c->exception_buf_initialized = 0;
        c->error_row = c->error_fld = c->error_msg = c->error_input = NULL;
 #ifndef HAVE_EMBEDDED /* no authentication in embedded mode */
-       (void) AUTHgetUsername(&c->username, c);
+       {
+               str msg = AUTHgetUsername(&c->username, c);
+               if (msg)                                /* shouldn't happen */
+                       GDKfree(msg);
+       }
 #endif
        MT_sema_init(&c->s, 0, "Client->s");
        return c;
@@ -608,15 +612,13 @@ MCvalid(Client tc)
 str
 PROFinitClient(Client c){
        (void) c;
-       startProfiler();
-       return MAL_SUCCEED;
+       return startProfiler();
 }
 
 str
 PROFexitClient(Client c){
        (void) c;
-       stopProfiler();
-       return MAL_SUCCEED;
+       return stopProfiler();
 }
 
 
diff --git a/monetdb5/mal/mal_import.c b/monetdb5/mal/mal_import.c
--- a/monetdb5/mal/mal_import.c
+++ b/monetdb5/mal/mal_import.c
@@ -292,12 +292,17 @@ evalFile(Client c, str fname, int listin
                        MSinitClientPrg(c, "user", "main");     /* 
re-initialize context */
                        MCpushClientInput(c, bstream_create(fd, 128 * BLOCK), 
c->listing, "");
                        msg = runScenario(c);
+                       if (msg != MAL_SUCCEED) {
+                               dumpExceptionsToStream(c->fdout, msg);
+                               GDKfree(msg);
+                       }
                }
                filename = p + 1;
        }
        fd = malOpenSource(filename);
        if (fd == 0 || mnstr_errnr(fd) == MNSTR_OPEN_ERROR) {
-               if( fd == 0) mnstr_destroy(fd);
+               if (fd)
+                       mnstr_destroy(fd);
                msg = createException(MAL,"mal.eval", "WARNING: could not open 
file: %s\n", filename);
        } else {
                c->srcFile = filename;
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
@@ -76,7 +76,7 @@ renderTerm(MalBlkPtr mb, MalStkPtr stk, 
                if( strcmp(cv,"nil") == 0){
                        strcat(buf+len,cv);
                        len += strlen(buf+len);
-                       if( cv) GDKfree(cv);
+                       GDKfree(cv);
                        showtype =getColumnType(getVarType(mb,varid)) > 
TYPE_str || 
                                ((isVarUDFtype(mb,varid) || 
isVarTypedef(mb,varid)) && isVarConstant(mb,varid)) || 
isaBatType(getVarType(mb,varid)); 
                } else{
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
@@ -198,10 +198,10 @@ renderProfilerEvent(MalBlkPtr mb, MalStk
                        stmtq = mal_quote(c, strlen(c));
                        if (stmtq != NULL) {
                                logadd("\"stmt\":\"%s\",%s", stmtq,prettify);
-                               //GDKfree(stmtq);
+                               GDKfree(stmtq);
                        }
                } 
-               //GDKfree(stmt);
+               GDKfree(stmt);
 
                // ship the beautified version as well
 
@@ -1018,9 +1018,10 @@ static void profilerHeartbeat(void *dumm
 
 void setHeartbeat(int delay)
 {
-       if (hbthread &&  delay < 0 ){
+       if (delay < 0 ){
                ATOMIC_SET(hbrunning, 0, mal_beatLock);
-               MT_join_thread(hbthread);
+               if (hbthread)
+                       MT_join_thread(hbthread);
                return;
        }
        if ( delay > 0 &&  delay <= 10)
diff --git a/monetdb5/mal/mal_recycle.c b/monetdb5/mal/mal_recycle.c
--- a/monetdb5/mal/mal_recycle.c
+++ b/monetdb5/mal/mal_recycle.c
@@ -1100,12 +1100,14 @@ RECYCLEdumpInternal(stream *s)
     /* and dump the statistics per instruction*/
        mnstr_printf(s,"# CL\t   lru\t\tcnt\t ticks\t rd\t wr\t Instr\n");
     for(i=0; i< recycleBlk->stop; i++){
+               str inst = 
instruction2str(recycleBlk,0,getInstrPtr(recycleBlk,i),0);
         mnstr_printf(s,"#%d\t%d\t"LLFMT"\t"LLFMT"\t"LLFMT"\t%s\n", i,
             recycleBlk->stmt[i]->calls,
             recycleBlk->stmt[i]->ticks,
             recycleBlk->stmt[i]->rbytes,
             recycleBlk->stmt[i]->wbytes,
-            instruction2str(recycleBlk,0,getInstrPtr(recycleBlk,i),0));
+            inst);
+               GDKfree(inst);
     }
 #else
        (void) i;
diff --git a/monetdb5/mal/mal_resolve.c b/monetdb5/mal/mal_resolve.c
--- a/monetdb5/mal/mal_resolve.c
+++ b/monetdb5/mal/mal_resolve.c
@@ -698,7 +698,7 @@ typeChecker(stream *out, Module scope, M
                        int tpe = getArgType(mb, p, k);
                        if (findGDKtype(tpe) == TYPE_bat ||
                                findGDKtype(tpe) == TYPE_str ||
-                               (!isPolyType(tpe) && tpe < TYPE_any && 
ATOMextern(tpe)))
+                               (!isPolyType(tpe) && tpe < MAXATOMS && 
ATOMextern(tpe)))
                                setVarCleanup(mb, getArg(p, k));
                }
 }
diff --git a/monetdb5/mal/mal_resource.c b/monetdb5/mal/mal_resource.c
--- a/monetdb5/mal/mal_resource.c
+++ b/monetdb5/mal/mal_resource.c
@@ -190,8 +190,10 @@ MALresourceFairness(lng usec)
        /* worker reporting time spent  in usec! */
        clk =  usec / 1000;
 
+#if FAIRNESS_THRESHOLD < 1000  /* it's actually 2000 */
        /* cap the maximum penalty */
        clk = clk > FAIRNESS_THRESHOLD? FAIRNESS_THRESHOLD:clk;
+#endif
 
        /* always keep one running to avoid all waiting  */
        while (clk > DELAYUNIT && users > 1 && ATOMIC_GET(mal_running, 
mal_runningLock) > (ATOMIC_TYPE) GDKnr_threads && rss > MEMORY_THRESHOLD) {
diff --git a/monetdb5/mal/mal_resource.h b/monetdb5/mal/mal_resource.h
--- a/monetdb5/mal/mal_resource.h
+++ b/monetdb5/mal/mal_resource.h
@@ -25,7 +25,7 @@
 mal_export int MALadmission(lng argclaim, lng hotclaim);
 #endif
 
-#define FAIRNESS_THRESHOLD MAX_DELAYS * DELAYUNIT
+#define FAIRNESS_THRESHOLD (MAX_DELAYS * DELAYUNIT)
 
 mal_export lng getMemoryClaim(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci, int 
i, int flag);
 mal_export void MALresourceFairness(lng usec);
diff --git a/monetdb5/mal/mal_runtime.c b/monetdb5/mal/mal_runtime.c
--- a/monetdb5/mal/mal_runtime.c
+++ b/monetdb5/mal/mal_runtime.c
@@ -230,7 +230,7 @@ getBatSpace(BAT *b){
                return 0;
        space += BATcount(b) * b->T->width;
        if( b->T->vheap) space += heapinfo(b->T->vheap, abs(b->batCacheid)); 
-       if(b->T) space += hashinfo(b->T->hash, abs(b->batCacheid)); 
+       space += hashinfo(b->T->hash, abs(b->batCacheid)); 
        space += IMPSimprintsize(b);
        return space;
 }
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
@@ -36,11 +36,16 @@
                        (J)++;                                                  
        \
        } while (0)
 
-#define CHECK_JSON(jt)                         \
-       if (jt && jt->error) {          \
-               char *msg = jt->error;  \
-               JSONfree(jt);           \
-               return msg;             \
+#define CHECK_JSON(jt)                                                         
                                        \
+       if (jt == NULL || jt->error) {                                          
                                \
+               char *msg;                                                      
                                                        \
+               if (jt) {                                                       
                                                        \
+                       msg = jt->error;                                        
                                                \
+                       JSONfree(jt);                                           
                                                \
+               } else {                                                        
                                                        \
+                       msg = createException(MAL, "json.new", 
MAL_MALLOC_FAIL);        \
+               }                                                               
                                                                \
+               return msg;                                                     
                                                        \
        }
 
 #define SEPARATOR ' '
@@ -61,6 +66,8 @@ JSONnewtree(int size)
        if (size == 0)
                size = jsonhint;
        js = (JSON *) GDKzalloc(sizeof(JSON));
+       if (js == NULL)
+               return NULL;
        js->elm = (JSONterm *) GDKzalloc(sizeof(JSONterm) * size);
        js->size = size;
        return js;
@@ -259,7 +266,8 @@ JSONjson2str(str *ret, json *j)
 
        if (*s == '"')
                s++;
-       s = GDKstrdup(s);
+       if ((s = GDKstrdup(s)) == NULL)
+               throw(MAL, "json.str", MAL_MALLOC_FAIL);
        c = s + strlen(s) - 1;
        if (*c == '"')
                *c = 0;
@@ -273,9 +281,9 @@ JSONstr2json(json *ret, str *j)
        JSON *jt = JSONparse(*j, FALSE);
 
        CHECK_JSON(jt);
-       if (jt)
-               JSONfree(jt);
-       *ret = GDKstrdup(*j);
+       JSONfree(jt);
+       if ((*ret = GDKstrdup(*j)) == NULL)
+               throw(MAL, "json.new", MAL_MALLOC_FAIL);
        return MAL_SUCCEED;
 }
 
@@ -284,10 +292,11 @@ JSONisvalid(bit *ret, json *j)
 {
        JSON *jt = JSONparse(*j, FALSE);
 
-       if (jt) {
-               *ret = jt->error == MAL_SUCCEED;
-               JSONfree(jt);
-       }
+       if (jt == NULL)
+               throw(MAL, "json.isvalid", MAL_MALLOC_FAIL);
+       *ret = jt->error == MAL_SUCCEED;
+       GDKfree(jt->error);
+       JSONfree(jt);
        return MAL_SUCCEED;
 }
 
@@ -479,25 +488,21 @@ JSONglue(str res, str r, char sep)
                return res;
        len = strlen(r);
        if (res == 0)
-               res = GDKstrdup(r);
-       else {
-               l = strlen(res);
-               n = GDKzalloc(l + len + 3);
-               strcpy(n, res);
-               if (sep) {
-                       n[l] = ',';
-                       strncpy(n + l + 1, r, len);
-                       n[l + 1 + len] = 0;
-               } else {
-                       strncpy(n + l, r, len);
-                       n[l + len] = 0;
-               }
-               GDKfree(res);
-               res = n;
+               return r;
+       l = strlen(res);
+       n = GDKzalloc(l + len + 3);
+       strcpy(n, res);
+       GDKfree(res);
+       if (sep) {
+               n[l] = ',';
+               strncpy(n + l + 1, r, len);
+               n[l + 1 + len] = 0;
+       } else {
+               strncpy(n + l, r, len);
+               n[l + len] = 0;
        }
-       if (r)
-               GDKfree(r);
-       return res;
+       GDKfree(r);
+       return n;
 }
 
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to