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]