Changeset: 2dcb8eedebc6 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2dcb8eedebc6 Modified Files: gdk/gdk_imprints.c gdk/gdk_storage.c monetdb5/mal/mal_box.c monetdb5/mal/mal_function.c monetdb5/mal/mal_readline.c monetdb5/mal/mal_recycle.c monetdb5/modules/atoms/inet.c monetdb5/modules/mal/bbp.c monetdb5/modules/mal/mal_io.c monetdb5/modules/mal/remote.c Branch: Jan2014 Log Message:
Fixed some, mostly fairly minor, problems found by Coverity. diffs (284 lines): diff --git a/gdk/gdk_imprints.c b/gdk/gdk_imprints.c --- a/gdk/gdk_imprints.c +++ b/gdk/gdk_imprints.c @@ -856,6 +856,8 @@ IMPSprint(BAT *b) { imprints = b->T->imprints; d = (cchdc_t *) imprints->dict->base; s = (char *) malloc(sizeof(char)*(imprints->bits+1)); + if (s == NULL) + return; #define IMPSPRNTMASK(T,B) \ do { \ @@ -881,5 +883,6 @@ do { \ } } } + free(s); } #endif diff --git a/gdk/gdk_storage.c b/gdk/gdk_storage.c --- a/gdk/gdk_storage.c +++ b/gdk/gdk_storage.c @@ -979,6 +979,7 @@ BATmultiprintf(stream *s, int argc, BAT ret = BATprintcols(s, argc + printhead, bats + !printhead); for (i = 0; i <= argc; i++) BBPunfix(bats[i]->batCacheid); + GDKfree(bats); return ret; bailout: @@ -986,5 +987,6 @@ BATmultiprintf(stream *s, int argc, BAT if (bats[i]) BBPunfix(bats[i]->batCacheid); } + GDKfree(bats); return GDK_FAIL; } diff --git a/monetdb5/mal/mal_box.c b/monetdb5/mal/mal_box.c --- a/monetdb5/mal/mal_box.c +++ b/monetdb5/mal/mal_box.c @@ -276,6 +276,13 @@ newBox(str name) obj->val = newGlobalStack(MAXVARS); if ( obj->val == NULL || obj->sym == NULL){ showException(GDKout, MAL,"box.new", MAL_MALLOC_FAIL); + if (obj->name) + GDKfree(obj->name); + if (obj->sym) + freeMalBlk(obj->sym); + if (obj->val) + GDKfree(obj->val); + GDKfree(obj); return NULL; } MT_lock_init(&obj->lock,"M5_box_lock"); @@ -745,6 +752,7 @@ loadBox(str name) { char boxfile[PATHLENGTH]; size_t i = 0; + str msg; snprintf(boxfile, PATHLENGTH, "%s%cbox", GDKgetenv("gdk_dbpath"), DIR_SEP); mkdir(boxfile,0755); /* ignore errors */ @@ -756,8 +764,16 @@ loadBox(str name) if (access(boxfile, R_OK) == 0) { Client child= MCforkClient(mal_clients); if( child != mal_clients){ - defaultScenario(child); - evalFile(child, boxfile, 0); + msg = defaultScenario(child); + if (msg) { + GDKfree(msg); + return; + } + msg = evalFile(child, boxfile, 0); + if (msg) { + GDKfree(msg); + return; + } MCcloseClient(child); #ifdef DEBUG_MAL_BOX mnstr_printf(GDKout, "loadBox:loaded the file %s\n", boxfile); diff --git a/monetdb5/mal/mal_function.c b/monetdb5/mal/mal_function.c --- a/monetdb5/mal/mal_function.c +++ b/monetdb5/mal/mal_function.c @@ -689,11 +689,14 @@ setLifespan(MalBlkPtr mb) int *blk; Lifespan span= newLifespan(mb); + if (span == NULL) + return NULL; prop = PropertyIndex("transparent"); blk= (int *) GDKzalloc(sizeof(int)*mb->vtop); if( blk == NULL){ GDKerror("setLifeSpan" MAL_MALLOC_FAIL); + GDKfree(span); return NULL; } diff --git a/monetdb5/mal/mal_readline.c b/monetdb5/mal/mal_readline.c --- a/monetdb5/mal/mal_readline.c +++ b/monetdb5/mal/mal_readline.c @@ -486,6 +486,7 @@ readConsole(Client cntxt) cntxt->fdin->buf= realloc(cntxt->fdin->buf, len+1); if( cntxt->fdin->buf == NULL) { GDKerror("readConsole" MAL_MALLOC_FAIL); + free(buf); goto bailout; } cntxt->fdin->size = len; 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 @@ -346,6 +346,8 @@ newpass: leaves = (int *)GDKzalloc(sizeof(int)*ltop); if( leaves == NULL){ GDKerror("RECYCLEcleanCache" MAL_MALLOC_FAIL); + GDKfree(lmask); + GDKfree(used); return; } l = 0; diff --git a/monetdb5/modules/atoms/inet.c b/monetdb5/modules/atoms/inet.c --- a/monetdb5/modules/atoms/inet.c +++ b/monetdb5/modules/atoms/inet.c @@ -173,7 +173,7 @@ INETtoString(str *retval, int *len, inet if (*len < 19) { if (*retval != NULL) GDKfree(*retval); - *retval = GDKmalloc(sizeof(str) * (*len = 19)); + *retval = GDKmalloc(sizeof(char) * (*len = 19)); } if (in_isnil(value)) { *len = snprintf(*retval, *len, "(nil)"); diff --git a/monetdb5/modules/mal/bbp.c b/monetdb5/modules/mal/bbp.c --- a/monetdb5/modules/mal/bbp.c +++ b/monetdb5/modules/mal/bbp.c @@ -655,7 +655,8 @@ CMDbbpdestroyBAT(Client cntxt, MalBlkPtr (void) cntxt; bid = (int *) getArgReference(stk, pci, 1); immediate = (bit *) getArgReference(stk, pci, 2); - msg = CMDbbpreleaseBAT(cntxt,mb, stk, pci); + if ((msg = CMDbbpreleaseBAT(cntxt,mb, stk, pci)) != MAL_SUCCEED) + return msg; if( *immediate) msg = BKCdestroyImmediate(&ret, bid); else diff --git a/monetdb5/modules/mal/mal_io.c b/monetdb5/modules/mal/mal_io.c --- a/monetdb5/modules/mal/mal_io.c +++ b/monetdb5/modules/mal/mal_io.c @@ -144,25 +144,28 @@ str IOprint_val(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p) { int i; + str msg; (void) cntxt; if (p->argc == 2) - IOprintBoth(cntxt, mb, stk, p, 1, "[ ", " ]\n", 0); + msg = IOprintBoth(cntxt, mb, stk, p, 1, "[ ", " ]\n", 0); else { - IOprintBoth(cntxt, mb, stk, p, 1, "[ ", 0, 1); + msg = IOprintBoth(cntxt, mb, stk, p, 1, "[ ", 0, 1); + if (msg) + return msg; for (i = 2; i < p->argc - 1; i++) - IOprintBoth(cntxt,mb, stk, p, i, ", ", 0, 1); - IOprintBoth(cntxt,mb, stk, p, i, ", ", "]\n", 1); + if ((msg = IOprintBoth(cntxt,mb, stk, p, i, ", ", 0, 1)) != NULL) + return msg; + msg = IOprintBoth(cntxt,mb, stk, p, i, ", ", "]\n", 1); } - return MAL_SUCCEED; + return msg; } str IOprint_tables(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p) { - IOtableAll(cntxt->fdout, cntxt, mb, stk, p, 1, 0, FALSE, TRUE); - return MAL_SUCCEED; + return IOtableAll(cntxt->fdout, cntxt, mb, stk, p, 1, 0, FALSE, TRUE); } str @@ -744,28 +747,33 @@ IOimport(int *ret, int *bid, str *fnme) if ((fn = fileno(fp)) <= 0) { BBPunfix(b->batCacheid); fclose(fp); + GDKfree(buf); throw(MAL, "io.import", OPERATION_FAILED " fileno()"); } if (fstat(fn, &st) != 0) { BBPunfix(b->batCacheid); fclose(fp); + GDKfree(buf); throw(MAL, "io.imports", OPERATION_FAILED "fstat()"); } (void) fclose(fp); if (st.st_size <= 0) { BBPunfix(b->batCacheid); - throw(MAL, "io.imports", OPERATION_FAILED "Empty file or fstat broken"); + GDKfree(buf); + throw(MAL, "io.imports", OPERATION_FAILED "Empty file"); } #if SIZEOF_SIZE_T == SIZEOF_INT if (st.st_size > ~ (size_t) 0) { BBPunfix(b->batCacheid); + GDKfree(buf); throw(MAL, "io.imports", OPERATION_FAILED "File too large"); } #endif base = cur = (char *) MT_mmap(*fnme, MMAP_SEQUENTIAL, (size_t) st.st_size); if (cur == NULL) { BBPunfix(b->batCacheid); + GDKfree(buf); throw(MAL, "io.mport", OPERATION_FAILED "MT_mmap()"); } end = cur + st.st_size; @@ -823,12 +831,16 @@ IOimport(int *ret, int *bid, str *fnme) if (*p == 0) { BBPunfix(b->batCacheid); snprintf(msg,sizeof(msg),"error in input %s",buf); + GDKfree(buf); + MT_munmap(base, end - base); throw(MAL, "io.import", "%s", msg); } n = hconvert(p, &lh, (ptr*)&h); if (n <= 0) { BBPunfix(b->batCacheid); snprintf(msg,sizeof(msg),"error in input %s",buf); + GDKfree(buf); + MT_munmap(base, end - base); throw(MAL, "io.import", "%s", msg); } p += n; @@ -841,17 +853,23 @@ IOimport(int *ret, int *bid, str *fnme) if (*p == 0) { BBPunfix(b->batCacheid); snprintf(msg,sizeof(msg),"error in input %s",buf); + GDKfree(buf); + MT_munmap(base, end - base); throw(MAL, "io.import", "%s", msg); } n = tconvert(p, <, (ptr*)&t); if (n <= 0) { BBPunfix(b->batCacheid); snprintf(msg,sizeof(msg),"error in input %s",buf); + GDKfree(buf); + MT_munmap(base, end - base); throw(MAL, "io.import", "%s", msg); } p += n; if (BUNins(b, h, t, FALSE) == NULL) { BBPunfix(b->batCacheid); + GDKfree(buf); + MT_munmap(base, end - base); throw(MAL, "io.import", "insert failed"); } diff --git a/monetdb5/modules/mal/remote.c b/monetdb5/modules/mal/remote.c --- a/monetdb5/modules/mal/remote.c +++ b/monetdb5/modules/mal/remote.c @@ -158,6 +158,7 @@ str RMTconnectScen( char *s; Mapi m; MapiHdl hdl; + str msg; /* just make sure the return isn't garbage */ *ret = 0; @@ -213,7 +214,9 @@ str RMTconnectScen( c->next = conns; conns = c; - RMTquery(&hdl, "remote.connect", m, "remote.bintype();"); + msg = RMTquery(&hdl, "remote.connect", m, "remote.bintype();"); + if (msg) + return msg; if (hdl != NULL && mapi_fetch_row(hdl)) { char *val = mapi_fetch_field(hdl, 0); c->type = (unsigned char)atoi(val); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list