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

Reply via email to