Changeset: a264ee007e2f for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a264ee007e2f
Modified Files:
clients/mapiclient/mclient.c
gdk/gdk_bbp.c
gdk/gdk_join.c
gdk/gdk_logger.c
gdk/gdk_storage.c
Branch: Jun2016
Log Message:
Coverity inspired fixes.
Mostly actual bugs.
diffs (213 lines):
diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c
--- a/clients/mapiclient/mclient.c
+++ b/clients/mapiclient/mclient.c
@@ -1987,7 +1987,7 @@ static int
doFileBulk(Mapi mid, stream *fp)
{
char *buf = NULL;
- size_t length;
+ ssize_t length;
MapiHdl hdl = mapi_get_active(mid);
MapiMsg rc = MOK;
size_t bufsize = 0;
@@ -2014,7 +2014,7 @@ doFileBulk(Mapi mid, stream *fp)
buf[0] = 0;
} else {
buf[length] = 0;
- if (strlen(buf) < length) {
+ if (strlen(buf) < (size_t) length) {
fprintf(stderr, "NULL byte in input\n");
errseen = 1;
break;
@@ -2027,7 +2027,7 @@ doFileBulk(Mapi mid, stream *fp)
}
assert(hdl != NULL);
- mapi_query_part(hdl, buf, length);
+ mapi_query_part(hdl, buf, (size_t) length);
CHECK_RESULT(mid, hdl, continue, buf);
/* if not at EOF, make sure there is a newline in the
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -729,7 +729,8 @@ fixsorted(void)
b = BATdescriptor(bid);
bi = bat_iterator(b);
}
- if (ATOMcmp(b->ttype,
+ if (b == NULL ||
+ ATOMcmp(b->ttype,
BUNtail(bi, bs->T.nosorted - 1),
BUNtail(bi, bs->T.nosorted)) <= 0) {
/* incorrect hint */
@@ -764,7 +765,8 @@ fixsorted(void)
b = BATdescriptor(bid);
bi = bat_iterator(b);
}
- if (ATOMcmp(b->ttype,
+ if (b == NULL ||
+ ATOMcmp(b->ttype,
BUNtail(bi, bs->T.norevsorted - 1),
BUNtail(bi, bs->T.norevsorted)) >=
0) {
/* incorrect hint */
@@ -3935,10 +3937,9 @@ force_move(int farmid, const char *srcdi
gdk_return
BBPrecover(int farmid)
{
- str bakdirpath = GDKfilepath(farmid, NULL, BAKDIR, NULL);
- str leftdirpath = GDKfilepath(farmid, NULL, LEFTDIR, NULL);
-
- DIR *dirp = opendir(bakdirpath);
+ str bakdirpath;
+ str leftdirpath;
+ DIR *dirp;
struct dirent *dent;
long_str path, dstpath;
bat i;
@@ -3947,7 +3948,17 @@ BBPrecover(int farmid)
int dirseen = FALSE;
str dstdir;
+ bakdirpath = GDKfilepath(farmid, NULL, BAKDIR, NULL);
+ leftdirpath = GDKfilepath(farmid, NULL, LEFTDIR, NULL);
+ if (bakdirpath == NULL || leftdirpath == NULL) {
+ GDKfree(bakdirpath);
+ GDKfree(leftdirpath);
+ return GDK_FAIL;
+ }
+ dirp = opendir(bakdirpath);
if (dirp == NULL) {
+ GDKfree(bakdirpath);
+ GDKfree(leftdirpath);
return GDK_SUCCEED; /* nothing to do */
}
memcpy(dstpath, BATDIR, j);
@@ -3959,6 +3970,8 @@ BBPrecover(int farmid)
if (mkdir(leftdirpath, 0755) < 0 && errno != EEXIST) {
GDKsyserror("BBPrecover: cannot create directory %s\n",
leftdirpath);
closedir(dirp);
+ GDKfree(bakdirpath);
+ GDKfree(leftdirpath);
return GDK_FAIL;
}
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -644,7 +644,8 @@ mergejoin_void(BAT *r1, BAT *r2, BAT *l,
r1->T->width = 0;
r1->T->shift = 0;
r1->tdense = 0;
- BATextend(r1, cnt - (hi - lo));
+ if (BATextend(r1, cnt - (hi - lo)) !=
GDK_SUCCEED)
+ goto bailout;
BATsetcount(r1, cnt - (hi - lo));
BATseqbase(BATmirror(r1), lo == seq ?
hi : seq);
} else {
@@ -910,6 +911,7 @@ mergejoin_void(BAT *r1, BAT *r2, BAT *l,
APPEND(r1, i + seq);
} else if (nil_on_miss) {
APPEND(r1, i + seq);
+ assert(r2 != NULL); /* help Coverity */
APPEND(r2, oid_nil);
r2->T->nil = 1;
r2->T->nonil = 0;
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -852,13 +852,14 @@ logger_open(logger *lg)
filename = GDKfilepath(BBPselectfarm(lg->dbfarm_role, 0, offheap),
lg->dir, LOGFILE, id);
lg->log = open_wstream(filename);
- GDKfree(filename);
lg->end = 0;
if (lg->log == NULL || mnstr_errnr(lg->log) || log_sequence_nrs(lg) !=
LOG_OK) {
fprintf(stderr, "!ERROR: logger_open: creating %s failed\n",
filename);
+ GDKfree(filename);
return LOG_ERR;
}
+ GDKfree(filename);
if ((bid = logger_find_bat(lg, "seqs_id")) != 0) {
int dbg = GDKdebug;
BAT *b;
@@ -1734,7 +1735,7 @@ logger_load(int debug, const char* fn, c
* what we expect, the conversion was apparently done
* already, and so we can delete the file. */
- /* Do not do conversion logger is shared/read-only */
+ /* Do not do conversion if logger is shared/read-only */
if (!lg->shared) {
snprintf(cvfile, sizeof(cvfile), "%sconvert-32-64",
lg->dir);
snprintf(bak, sizeof(bak), "%s_32-64-convert", fn);
@@ -1746,6 +1747,8 @@ logger_load(int debug, const char* fn, c
/* read the current log id without disturbing
* the file pointer */
off = ftell(fp);
+ if (off < 0) /* should never happen */
+ goto error;
if (fscanf(fp, "%d", &curid) != 1)
curid = -1; /* shouldn't happen? */
fseek(fp, off, SEEK_SET);
@@ -2227,12 +2230,13 @@ logger_read_last_transaction_id(logger *
snprintf(filename, sizeof(filename), "%s%s", dir, logger_file);
if ((fp = GDKfileopen(farmid, NULL, filename, NULL, "r")) == NULL) {
fprintf(stderr, "!ERROR: logger_read_last_transaction_id:
unable to open file %s\n", filename);
- goto error;
+ return LOG_ERR;
}
if (check_version(lg, fp) != GDK_SUCCEED) {
fprintf(stderr, "!ERROR: logger_read_last_transaction_id:
inconsistent log version for file %s\n", filename);
- goto error;
+ fclose(fp);
+ return LOG_ERR;
}
/* read the last id */
@@ -2242,15 +2246,8 @@ logger_read_last_transaction_id(logger *
fprintf(stderr, "#logger_read_last_transaction_id last
logger id written in %s is " LLFMT "\n", filename, lid);
}
}
-
+ fclose(fp);
return lid;
-
- error:
- if (fp)
- fclose(fp);
- if (lg)
- GDKfree(lg);
- return LOG_ERR;
}
int
diff --git a/gdk/gdk_storage.c b/gdk/gdk_storage.c
--- a/gdk/gdk_storage.c
+++ b/gdk/gdk_storage.c
@@ -134,16 +134,21 @@ GDKcreatedir(const char *dir)
gdk_return
GDKremovedir(int farmid, const char *dirname)
{
- str dirnamestr = GDKfilepath(farmid, NULL, dirname, NULL);
- DIR *dirp = opendir(dirnamestr);
+ str dirnamestr;
+ DIR *dirp;
char *path;
struct dirent *dent;
int ret;
+ if ((dirnamestr = GDKfilepath(farmid, NULL, dirname, NULL)) == NULL)
+ return GDK_FAIL;
+
IODEBUG fprintf(stderr, "#GDKremovedir(%s)\n", dirnamestr);
- if (dirp == NULL)
+ if ((dirp = opendir(dirnamestr)) == NULL) {
+ GDKfree(dirnamestr);
return GDK_SUCCEED;
+ }
while ((dent = readdir(dirp)) != NULL) {
if (dent->d_name[0] == '.' &&
(dent->d_name[1] == 0 ||
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list