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