Changeset: 2fa82e0f33b7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/2fa82e0f33b7
Modified Files:
        clients/odbc/driver/ODBCConvert.c
        cmake/monetdb-toolchain.cmake
        common/utils/msabaoth.c
        gdk/gdk_storage.c
        monetdb5/mal/mal_type.c
        monetdb5/modules/mal/remote.c
        monetdb5/modules/mal/tokenizer.c
        monetdb5/optimizer/opt_wrapper.c
        sql/backends/monet5/UDF/pyapi3/convert_loops.h
        sql/backends/monet5/vaults/fits/fits.c
        sql/backends/monet5/vaults/shp/shp.c
        tools/merovingian/daemon/client.c
        tools/merovingian/daemon/controlrunner.c
        tools/merovingian/daemon/merovingian.c
        tools/merovingian/utils/database.c
Branch: default
Log Message:

Fix some buffer sizes so we can compile with -Wformat-truncation warnings.


diffs (truncated from 355 to 300 lines):

diff --git a/clients/odbc/driver/ODBCConvert.c 
b/clients/odbc/driver/ODBCConvert.c
--- a/clients/odbc/driver/ODBCConvert.c
+++ b/clients/odbc/driver/ODBCConvert.c
@@ -3315,7 +3315,10 @@ ODBCStore(ODBCStmt *stmt,
                case SQL_C_INTERVAL_SECOND:
                        snprintf(data, sizeof(data), "%s%0*u", 
ival.interval_sign ? "-" : "", (int) 
apdrec->sql_desc_datetime_interval_precision, (unsigned int) 
ival.intval.day_second.second);
                        assigns(buf, bufpos, buflen, data, stmt);
-                       if (ival.intval.day_second.fraction && ivalprec > 0) {
+                       /* if ivalprec > 16, the digits that are used by
+                        * the server are all 0, so we don't need to
+                        * write them */
+                       if (ival.intval.day_second.fraction && ivalprec > 0 && 
ivalprec < 17) {
                                snprintf(data, sizeof(data), ".%0*u", ivalprec, 
(unsigned int) ival.intval.day_second.fraction);
                                assigns(buf, bufpos, buflen, data, stmt);
                        }
@@ -3331,7 +3334,7 @@ ODBCStore(ODBCStmt *stmt,
                case SQL_C_INTERVAL_DAY_TO_SECOND:
                        snprintf(data, sizeof(data), "%s%0*u %02u:%02u:%02u", 
ival.interval_sign ? "-" : "", (int) 
apdrec->sql_desc_datetime_interval_precision, (unsigned int) 
ival.intval.day_second.day, (unsigned int) ival.intval.day_second.hour, 
(unsigned int) ival.intval.day_second.minute, (unsigned int) 
ival.intval.day_second.second);
                        assigns(buf, bufpos, buflen, data, stmt);
-                       if (ival.intval.day_second.fraction && ivalprec > 0) {
+                       if (ival.intval.day_second.fraction && ivalprec > 0 && 
ivalprec < 17) {
                                snprintf(data, sizeof(data), ".%0*u", ivalprec, 
(unsigned int) ival.intval.day_second.fraction);
                                assigns(buf, bufpos, buflen, data, stmt);
                        }
@@ -3343,7 +3346,7 @@ ODBCStore(ODBCStmt *stmt,
                case SQL_C_INTERVAL_HOUR_TO_SECOND:
                        snprintf(data, sizeof(data), "%s%0*u:%02u:%02u", 
ival.interval_sign ? "-" : "", (int) 
apdrec->sql_desc_datetime_interval_precision, (unsigned int) 
ival.intval.day_second.hour, (unsigned int) ival.intval.day_second.minute, 
(unsigned int) ival.intval.day_second.second);
                        assigns(buf, bufpos, buflen, data, stmt);
-                       if (ival.intval.day_second.fraction && ivalprec > 0) {
+                       if (ival.intval.day_second.fraction && ivalprec > 0 && 
ivalprec < 17) {
                                snprintf(data, sizeof(data), ".%0*u", ivalprec, 
(unsigned int) ival.intval.day_second.fraction);
                                assigns(buf, bufpos, buflen, data, stmt);
                        }
@@ -3351,7 +3354,7 @@ ODBCStore(ODBCStmt *stmt,
                case SQL_C_INTERVAL_MINUTE_TO_SECOND:
                        snprintf(data, sizeof(data), "%s%0*u:%02u", 
ival.interval_sign ? "-" : "", (int) 
apdrec->sql_desc_datetime_interval_precision, (unsigned int) 
ival.intval.day_second.minute, (unsigned int) ival.intval.day_second.second);
                        assigns(buf, bufpos, buflen, data, stmt);
-                       if (ival.intval.day_second.fraction && ivalprec > 0) {
+                       if (ival.intval.day_second.fraction && ivalprec > 0 && 
ivalprec < 17) {
                                snprintf(data, sizeof(data), ".%0*u", ivalprec, 
(unsigned int) ival.intval.day_second.fraction);
                                assigns(buf, bufpos, buflen, data, stmt);
                        }
diff --git a/cmake/monetdb-toolchain.cmake b/cmake/monetdb-toolchain.cmake
--- a/cmake/monetdb-toolchain.cmake
+++ b/cmake/monetdb-toolchain.cmake
@@ -57,7 +57,7 @@ function(monetdb_default_compiler_option
       add_option_if_available("-Wundef")
       add_option_if_available("-Wformat=2")
       add_option_if_available("-Wformat-overflow=1")
-      add_option_if_available("-Wno-format-truncation")
+      #add_option_if_available("-Wno-format-truncation")
       add_option_if_available("-Wno-format-nonliteral")
       #add_option_if_available("-Wformat-signedness")  -- numpy messes this up
       add_option_if_available("-Wno-cast-function-type")
diff --git a/common/utils/msabaoth.c b/common/utils/msabaoth.c
--- a/common/utils/msabaoth.c
+++ b/common/utils/msabaoth.c
@@ -639,14 +639,14 @@ msab_pickSecret(char **generated_secret)
        }
 
        if ((fd = MT_open(pathbuf, O_CREAT | O_WRONLY | O_CLOEXEC)) == -1) {
-               char err[512];
+               char err[FILENAME_MAX + 512];
                snprintf(err, sizeof(err), "unable to open '%s': %s",
                                 pathbuf, strerror(errno));
                free(secret);
                return strdup(err);
        }
        if ((f = fdopen(fd, "w")) == NULL) {
-               char err[512];
+               char err[FILENAME_MAX + 512];
                snprintf(err, sizeof(err), "unable to open '%s': %s",
                                 pathbuf, strerror(errno));
                close(fd);
diff --git a/gdk/gdk_storage.c b/gdk/gdk_storage.c
--- a/gdk/gdk_storage.c
+++ b/gdk/gdk_storage.c
@@ -867,7 +867,7 @@ BATdelete(BAT *b)
 {
        bat bid = b->batCacheid;
        BAT *loaded = BBP_cache(bid);
-       char o[10];
+       char o[12];
 
        assert(bid > 0);
        snprintf(o, sizeof(o), "%o", (unsigned) bid);
diff --git a/monetdb5/mal/mal_type.c b/monetdb5/mal/mal_type.c
--- a/monetdb5/mal/mal_type.c
+++ b/monetdb5/mal/mal_type.c
@@ -34,7 +34,7 @@
 str
 getTypeName(malType tpe)
 {
-       char buf[FILENAME_MAX];
+       char buf[IDLENGTH + 6];
        int k;
 
        if (tpe == TYPE_any)
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
@@ -465,7 +465,7 @@ RMTfindconn(connection *ret, const char 
  * The encoding of the type allows for ease of type checking later on.
  */
 static inline str
-RMTgetId(char *buf, MalBlkPtr mb, InstrPtr p, int arg) {
+RMTgetId(char *buf, size_t buflen, MalBlkPtr mb, InstrPtr p, int arg) {
        InstrPtr f;
        const char *mod;
        char *var;
@@ -484,7 +484,7 @@ RMTgetId(char *buf, MalBlkPtr mb, InstrP
        if (rt == NULL)
                throw(MAL, "remote.put", SQLSTATE(HY013) MAL_MALLOC_FAIL);
 
-       snprintf(buf, BUFSIZ, "rmt%u_%s_%s", (unsigned) ATOMIC_ADD(&idtag, 1), 
var, rt);
+       snprintf(buf, buflen, "rmt%u_%s_%s", (unsigned) ATOMIC_ADD(&idtag, 1), 
var, rt);
 
        GDKfree(rt);
        return(MAL_SUCCEED);
@@ -975,7 +975,7 @@ static str RMTget(Client cntxt, MalBlkPt
  */
 static str RMTput(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) {
        str conn, tmp;
-       char ident[BUFSIZ];
+       char ident[512];
        connection c;
        ValPtr v;
        int type;
@@ -999,7 +999,7 @@ static str RMTput(Client cntxt, MalBlkPt
        MT_lock_set(&c->lock);
 
        /* get a free, typed identifier for the remote host */
-       tmp = RMTgetId(ident, mb, pci, 2);
+       tmp = RMTgetId(ident, sizeof(ident), mb, pci, 2);
        if (tmp != MAL_SUCCEED) {
                MT_lock_unset(&c->lock);
                return tmp;
@@ -1176,8 +1176,8 @@ static str RMTregisterInternal(Client cn
        MT_lock_set(&c->lock);
 
        /* get a free, typed identifier for the remote host */
-       char ident[BUFSIZ];
-       tmp = RMTgetId(ident, sym->def, getInstrPtr(sym->def, 0), 0);
+       char ident[512];
+       tmp = RMTgetId(ident, sizeof(ident), sym->def, getInstrPtr(sym->def, 
0), 0);
        if (tmp != MAL_SUCCEED) {
                MT_lock_unset(&c->lock);
                return tmp;
diff --git a/monetdb5/modules/mal/tokenizer.c b/monetdb5/modules/mal/tokenizer.c
--- a/monetdb5/modules/mal/tokenizer.c
+++ b/monetdb5/modules/mal/tokenizer.c
@@ -104,7 +104,7 @@ TKNZRopen(void *ret, str *in)
        int depth;
        bat r;
        bat idx;
-       char batname[134];
+       char batname[sizeof(name) + 20];
        BAT *b;
 
        (void) ret;
@@ -132,7 +132,7 @@ TKNZRopen(void *ret, str *in)
        /* now we are sure that none overwrites the tokenizer table*/
        MT_lock_unset(&mal_contextLock);
 
-       snprintf(name, 128, "%s", *in);
+       snprintf(name, sizeof(name), "%s", *in);
 
        snprintf(batname, sizeof(batname), "%s_index", name);
        idx = BBPindex(batname);
@@ -246,7 +246,7 @@ static str
 TKNZRappend(oid *pos, str *s)
 {
        str url;
-       char batname[132];
+       char batname[sizeof(name) + 20];
        str parts[MAX_TKNZR_DEPTH];
        str msg;
        int i, new, depth;
diff --git a/monetdb5/optimizer/opt_wrapper.c b/monetdb5/optimizer/opt_wrapper.c
--- a/monetdb5/optimizer/opt_wrapper.c
+++ b/monetdb5/optimizer/opt_wrapper.c
@@ -170,7 +170,7 @@ str OPTwrapper (Client cntxt, MalBlkPtr 
 
        clk = GDKusec();
        const char *id = getFunctionId(p);
-       for (i=codehash[*id]; codes[i].nme; i++){
+       for (i=codehash[(unsigned char) *id]; codes[i].nme; i++){
                if (codes[i].nme[0] == *id && strcmp(codes[i].nme, 
getFunctionId(p)) == 0){
                        msg = (str)(*(codes[i].fcn))(cntxt, mb, stk, p);
                        clk = GDKusec() - clk;
diff --git a/sql/backends/monet5/UDF/pyapi3/convert_loops.h 
b/sql/backends/monet5/UDF/pyapi3/convert_loops.h
--- a/sql/backends/monet5/UDF/pyapi3/convert_loops.h
+++ b/sql/backends/monet5/UDF/pyapi3/convert_loops.h
@@ -117,7 +117,7 @@
                        if (batstore == STORE_MMAPABS) {                        
           \
                                /* If we are taking data from a MMAP file, set 
the filename to \
                                 * the absolute path */                         
               \
-                               char address[100];                              
               \
+                               char address[sizeof(bat->theap->filename)-4];   
               \
                                GDKmmapfile(address, sizeof(address), 
ret->mmap_id);           \
                                strconcat_len(bat->theap->filename,             
               \
                                                          
sizeof(bat->theap->filename),                    \
diff --git a/sql/backends/monet5/vaults/fits/fits.c 
b/sql/backends/monet5/vaults/fits/fits.c
--- a/sql/backends/monet5/vaults/fits/fits.c
+++ b/sql/backends/monet5/vaults/fits/fits.c
@@ -683,7 +683,7 @@ str FITSattach(Client cntxt, MalBlkPtr m
        fitsfile *fptr;  /* pointer to the FITS file */
        int status = 0, i, j, hdutype, hdunum = 1, cnum = 0, bitpixnumber = 0;
        oid fid, tid, cid, rid = oid_nil;
-       char tname[BUFSIZ], *tname_low = NULL, *s, bname[BUFSIZ], stmt[BUFSIZ];
+       char tname[BUFSIZ], *tname_low = NULL, *s, bname[BUFSIZ-100], 
stmt[BUFSIZ];
        long tbcol; /* type long used by fits library */
        char cname[BUFSIZ], tform[BUFSIZ], tunit[BUFSIZ], tnull[BUFSIZ], 
tdisp[BUFSIZ];
        char *esc_cname, *esc_tform, *esc_tunit;
@@ -758,7 +758,7 @@ str FITSattach(Client cntxt, MalBlkPtr m
                /* SQL table name - the name of FITS extention */
                fits_read_key(fptr, TSTRING, "EXTNAME", tname, NULL, &status);
                if (status) {
-                       snprintf(tname, BUFSIZ, "%s_%d", bname, i);
+                       snprintf(tname, sizeof(tname), "%s_%d", bname, i);
                        tname_low = toLower(tname);
                        status = 0;
                }else  { /* check table name for existence in the fits catalog 
*/
@@ -768,7 +768,7 @@ str FITSattach(Client cntxt, MalBlkPtr m
                        /* or as regular SQL table */
                        tbl = mvc_bind_table(m, sch, tname_low);
                        if (!is_oid_nil(rid) || tbl) {
-                               snprintf(tname, BUFSIZ, "%s_%d", bname, i);
+                               snprintf(tname, sizeof(tname), "%s_%d", bname, 
i);
                                tname_low = toLower(tname);
                        }
                }
@@ -880,7 +880,7 @@ str FITSattach(Client cntxt, MalBlkPtr m
                                fits_close_file(fptr, &status);
                                throw(MAL, "fits.attach", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
                        }
-                       snprintf(stmt, BUFSIZ, FITS_INS_COL, (int)cid, 
esc_cname, esc_tform, esc_tunit, j, (int)tid);
+                       snprintf(stmt, sizeof(stmt), FITS_INS_COL, (int)cid, 
esc_cname, esc_tform, esc_tunit, j, (int)tid);
                        GDKfree(esc_tunit);
                        GDKfree(esc_tform);
                        GDKfree(esc_cname);
diff --git a/sql/backends/monet5/vaults/shp/shp.c 
b/sql/backends/monet5/vaults/shp/shp.c
--- a/sql/backends/monet5/vaults/shp/shp.c
+++ b/sql/backends/monet5/vaults/shp/shp.c
@@ -194,13 +194,14 @@ SHPattach(Client cntxt, MalBlkPtr mb, Ma
        str msg = MAL_SUCCEED;
        str fname = *(str*)getArgReference(stk, pci, 1);
        /* SHP-level descriptor */
-       char buf[BUFSIZ], temp_buf[BUFSIZ], *s=buf;
+       char buf[BUFSIZ], temp_buf[BUFSIZ-100], *s=buf;
        int  i=0, shpid = 0;
        oid fid, rid = oid_nil;
        GDALWConnection shp_conn;
        GDALWConnection * shp_conn_ptr = NULL;
        GDALWSimpleFieldDef * field_definitions;
        GDALWSpatialInfo spatial_info;
+       size_t pos;
 
        char *nameToLowerCase = NULL;
 
@@ -270,18 +271,19 @@ SHPattach(Client cntxt, MalBlkPtr mb, Ma
 
        /* create the table that will store the data of the shape file */
        temp_buf[0]='\0';
+       pos = 0;
        for (i=0 ; i<shp_conn.numFieldDefinitions ; i++) {
                nameToLowerCase = toLower(field_definitions[i].fieldName);
                if (strcmp(field_definitions[i].fieldType, "Integer") == 0) {
-                       sprintf(temp_buf + strlen(temp_buf), "\"%s\" INT, ", 
nameToLowerCase);
+                       pos += snprintf(temp_buf + pos, sizeof(temp_buf) - pos, 
"\"%s\" INT, ", nameToLowerCase);
                } else if (strcmp(field_definitions[i].fieldType, "Real") == 0) 
{
-                       sprintf(temp_buf + strlen(temp_buf), "\"%s\" FLOAT, ", 
nameToLowerCase);
+                       pos += snprintf(temp_buf + pos, sizeof(temp_buf) - pos, 
"\"%s\" FLOAT, ", nameToLowerCase);
 #if 0
                } else if (strcmp(field_definitions[i].fieldType, "Date") == 0) 
{
-                       sprintf(temp_buf + strlen(temp_buf), "\"%s\" STRING, ", 
nameToLowerCase);
+                       pos += snprintf(temp_buf + pos, sizeof(temp_buf) - pos, 
"\"%s\" STRING, ", nameToLowerCase);
 #endif
-               } else
-                       sprintf(temp_buf + strlen(temp_buf), "\"%s\" STRING, ", 
nameToLowerCase);
+               } else
+                       pos += snprintf(temp_buf + pos, sizeof(temp_buf) - pos, 
"\"%s\" STRING, ", nameToLowerCase);
                GDKfree(nameToLowerCase);
        }
 
diff --git a/tools/merovingian/daemon/client.c 
b/tools/merovingian/daemon/client.c
--- a/tools/merovingian/daemon/client.c
+++ b/tools/merovingian/daemon/client.c
@@ -62,7 +62,7 @@ handleClient(void *data)
        char *user = NULL, *algo = NULL, *passwd = NULL, *lang = NULL;
        char *database = NULL, *s;
        char dbmod[64];
-       char host[512];
+       char host[512+16+1];
        char port[16];
        sabdb *top = NULL;
        sabdb *stat = NULL;
diff --git a/tools/merovingian/daemon/controlrunner.c 
b/tools/merovingian/daemon/controlrunner.c
--- a/tools/merovingian/daemon/controlrunner.c
+++ b/tools/merovingian/daemon/controlrunner.c
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to