Changeset: 39386117b394 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=39386117b394
Modified Files:
MonetDB.spec
gdk/gdk.h
monetdb5/modules/atoms/json.c
monetdb5/modules/mal/wlc.c
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql_statement.c
sql/backends/monet5/wlr.c
sql/server/rel_planner.c
sql/server/rel_semantic.c
sql/server/rel_updates.c
Branch: Mar2018
Log Message:
Various compilation issues.
Avoid the use of strncpy.
diffs (292 lines):
diff --git a/MonetDB.spec b/MonetDB.spec
--- a/MonetDB.spec
+++ b/MonetDB.spec
@@ -434,6 +434,7 @@ developer.
%{_bindir}/smack01
%{_bindir}/shutdowntest
%{_bindir}/testgetinfo
+%{_bindir}/testStmtAttr
%{_bindir}/malsample.pl
%{_bindir}/sqlsample.php
%{_bindir}/sqlsample.pl
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -340,8 +340,10 @@
* specific attributes that we use are known */
#ifndef __has_attribute
#define __has_attribute(attr) 0
+#ifndef __attribute__
#define __attribute__(attr) /* empty */
#endif
+#endif
#if !__has_attribute(__warn_unused_result__)
#define __warn_unused_result__
#endif
diff --git a/monetdb5/modules/atoms/json.c b/monetdb5/modules/atoms/json.c
--- a/monetdb5/modules/atoms/json.c
+++ b/monetdb5/modules/atoms/json.c
@@ -525,16 +525,8 @@ JSONglue(str res, str r, char sep)
GDKfree(r);
return NULL;
}
- strcpy(n, res);
+ snprintf(n, l + len + 3, "%s%s%s", res, sep ? "," : "", r);
GDKfree(res);
- if (sep) {
- n[l] = ',';
- strncpy(n + l + 1, r, len);
- n[l + 1 + len] = 0;
- } else {
- strncpy(n + l, r, len);
- n[l + len] = 0;
- }
GDKfree(r);
return n;
}
diff --git a/monetdb5/modules/mal/wlc.c b/monetdb5/modules/mal/wlc.c
--- a/monetdb5/modules/mal/wlc.c
+++ b/monetdb5/modules/mal/wlc.c
@@ -184,13 +184,13 @@ WLCreadConfig(FILE *fd)
while( fgets(path, FILENAME_MAX, fd) ){
path[strlen(path)-1] = 0;
if( strncmp("logs=", path,5) == 0)
- strncpy(wlc_dir, path + 5, FILENAME_MAX);
+ snprintf(wlc_dir, FILENAME_MAX, "%s", path + 5);
if( strncmp("snapshot=", path,9) == 0)
- strncpy(wlc_snapshot, path + 9, FILENAME_MAX);
+ snprintf(wlc_snapshot, FILENAME_MAX, "%s", path + 9);
if( strncmp("id=", path,3) == 0)
wlc_id = atol(path+ 3);
if( strncmp("write=", path,6) == 0)
- strncpy(wlc_write, path + 6, 26);
+ snprintf(wlc_write, 26, "%s", path + 6);
if( strncmp("batches=", path, 8) == 0)
wlc_batches = atoi(path+ 8);
if( strncmp("beat=", path, 5) == 0)
@@ -338,7 +338,7 @@ WLCinit(void)
}
GDKfree(conf);
// we are in master mode
- strncpy(wlc_name, GDKgetenv("gdk_dbname"),IDLENGTH );
+ snprintf(wlc_name, IDLENGTH, "%s", GDKgetenv("gdk_dbname"));
msg = WLCgetConfig();
if( msg)
GDKerror("%s",msg);
@@ -417,7 +417,7 @@ WLCmaster(Client cntxt, MalBlkPtr mb, Ma
if( wlc_state == WLC_RUN)
throw(MAL,"master","WARNING: already in master mode, call
ignored");
if( pci->argc == 2)
- strncpy(path, *getArgReference_str(stk, pci,1), FILENAME_MAX);
+ snprintf(path, FILENAME_MAX, "%s", *getArgReference_str(stk,
pci,1));
else{
if((l = GDKfilepath(0,0,"wlc_logs",0)) == NULL)
throw(SQL,"wlc.master", MAL_MALLOC_FAIL);
@@ -427,8 +427,8 @@ WLCmaster(Client cntxt, MalBlkPtr mb, Ma
// set location for logs
if( GDKcreatedir(path) == GDK_FAIL)
throw(SQL,"wlc.master","Could not create %s\n", path);
- strncpy(wlc_name, GDKgetenv("gdk_dbname"),IDLENGTH );
- strncpy(wlc_dir,path, FILENAME_MAX);
+ snprintf(wlc_name, IDLENGTH, "%s", GDKgetenv("gdk_dbname"));
+ snprintf(wlc_dir, FILENAME_MAX, "%s", path);
wlc_state= WLC_RUN;
return WLCsetConfig();
}
@@ -897,7 +897,7 @@ WLCwrite(Client cntxt)
// Update wlc administration
wlc_id++;
- strncpy(wlc_write, getVarConstant(cntxt->wlc, getArg(p,
2)).val.sval, 26);
+ snprintf(wlc_write, 26, "%s", getVarConstant(cntxt->wlc,
getArg(p, 2)).val.sval);
// close file if no delay is allowed
if( wlc_beat == 0 )
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -1118,10 +1118,8 @@ rel_parse_value(backend *be, char *query
GDKfree(n);
return sql_error(m, 02, SQLSTATE(HY001) MAL_MALLOC_FAIL);
}
- strncpy(n, query, len);
+ snprintf(n, len + 2, "%s\n", query);
query = n;
- query[len] = '\n';
- query[len+1] = 0;
len++;
buffer_init(b, query, len);
sr = buffer_rastream(b, "sqlstatement");
@@ -2986,10 +2984,8 @@ sql_parse(backend *be, sql_allocator *sa
n = GDKmalloc(len + 1 + 1);
if (n == 0)
return sql_error(m, 02, SQLSTATE(HY001) MAL_MALLOC_FAIL);
- strncpy(n, query, len);
+ snprintf(n, len + 2, "%s\n", query);
query = n;
- query[len] = '\n';
- query[len+1] = 0;
len++;
buffer_init(b, query, len);
buf = buffer_rastream(b, "sqlstatement");
diff --git a/sql/backends/monet5/sql_statement.c
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -3243,19 +3243,13 @@ func_name(sql_allocator *sa, const char
char *ns = SA_NEW_ARRAY(sa, char, l2 + 1);
if(!ns)
return NULL;
- strncpy(ns, n2, l2);
- ns[l2] = 0;
+ snprintf(ns, l2 + 1, "%s", n2);
return ns;
} else {
char *ns = SA_NEW_ARRAY(sa, char, l1 + l2 + 2), *s = ns;
if(!ns)
return NULL;
- strncpy(ns, n1, l1);
- ns += l1;
- *ns++ = '_';
- strncpy(ns, n2, l2);
- ns += l2;
- *ns = '\0';
+ snprintf(ns, l1 + l2 + 2, "%s_%s", n1, n2);
return s;
}
}
diff --git a/sql/backends/monet5/wlr.c b/sql/backends/monet5/wlr.c
--- a/sql/backends/monet5/wlr.c
+++ b/sql/backends/monet5/wlr.c
@@ -66,7 +66,7 @@ WLRgetConfig(void){
while( fgets(line, MAXLINE, fd) ){
line[strlen(line)-1]= 0;
if( strncmp("master=", line,7) == 0)
- strncpy(wlr_master, line + 7, IDLENGTH);
+ snprintf(wlr_master, IDLENGTH, "%s", line + 7);
if( strncmp("batches=", line, 8) == 0)
wlr_batches = atoi(line+ 8);
if( strncmp("tag=", line, 4) == 0)
@@ -78,7 +78,7 @@ WLRgetConfig(void){
if( strncmp("timelimit=", line, 10) == 0)
strcpy(wlr_timelimit, line + 10);
if( strncmp("error=", line, 6) == 0)
- strncpy(wlr_error, line+ 6, FILENAME_MAX);
+ snprintf(wlr_error, FILENAME_MAX, "%s", line + 6);
}
fclose(fd);
return MAL_SUCCEED;
@@ -249,7 +249,7 @@ WLRprocess(void *arg)
if( mb->errors){
char line[FILENAME_MAX];
snprintf(line,
FILENAME_MAX,"#wlr.process:failed further parsing '%s':\n",path);
- strncpy(wlr_error,line, FILENAME_MAX);
+ snprintf(wlr_error, FILENAME_MAX, "%.*s",
FILENAME_MAX, line);
mnstr_printf(GDKerr,"%s",line);
printFunction(GDKerr, mb, 0, LIST_MAL_DEBUG );
}
@@ -271,7 +271,7 @@ WLRprocess(void *arg)
goto wrapup;
} else
if( getModuleId(q) == wlrRef && getFunctionId(q) ==
transactionRef ){
- strncpy(wlr_read, getVarConstant(mb,
getArg(q,2)).val.sval,26);
+ snprintf(wlr_read, 26, "%s", getVarConstant(mb,
getArg(q,2)).val.sval);
wlr_tag = getVarConstant(mb,
getArg(q,1)).val.lval;
#ifdef _WLR_DEBUG_
mnstr_printf(GDKerr,"#run tlimit %s tag %s\n",
wlr_timelimit, wlr_read);
@@ -317,7 +317,7 @@ WLRprocess(void *arg)
} else {
char line[FILENAME_MAX];
snprintf(line,
FILENAME_MAX,"#wlr.process:typechecking failed '%s':\n",path);
- strncpy(wlr_error, line, FILENAME_MAX);
+ snprintf(wlr_error, FILENAME_MAX, "%s",
line);
mnstr_printf(GDKerr,"%s",line);
printFunction(GDKerr, mb, 0,
LIST_MAL_DEBUG );
}
@@ -455,7 +455,7 @@ WLRreplicate(Client cntxt, MalBlkPtr mb,
wlr_limit = -1;
if(
strcmp(GDKgetenv("gdk_dbname"),*getArgReference_str(stk,pci,1)) == 0)
throw(SQL,"wlr.replicate",SQLSTATE(42000)
"Master and replicate should be different");
- strncpy(wlr_master, *getArgReference_str(stk,pci,1),
IDLENGTH);
+ snprintf(wlr_master, IDLENGTH, "%s",
*getArgReference_str(stk,pci,1));
}
} else {
timelimit[0]=0;
diff --git a/sql/server/rel_planner.c b/sql/server/rel_planner.c
--- a/sql/server/rel_planner.c
+++ b/sql/server/rel_planner.c
@@ -68,32 +68,23 @@ memo_find(list *memo, const char *name)
static char *
merge_names( sql_allocator *sa, const char *lname, const char *rname)
{
- size_t llen = strlen(lname);
- size_t rlen = strlen(rname);
- char *n = SA_NEW_ARRAY(sa, char, llen+rlen+2), *p = n;
- const char *c = lname;
+ size_t l = strlen(lname) + strlen(rname) + 2;
+ char *n = SA_NEW_ARRAY(sa, char, l);
+ const char *p = lname;
+ const char *c;
- while (*c) {
- int i = 0;
- for ( ; c[i] && c[i] != ','; i++)
- p[i] = c[i];
- p[i] = 0;
- if (strcmp(p, rname) > 0) {
- strncpy(p, rname, rlen);
- p+=rlen;
- *p++ = ',';
- strcpy(p, c);
- break;
- } else {
- p+=i;
- *p++ = ',';
- c+=i;
- if (*c == 0)
- strcpy(p, rname);
+ while ((c = strchr(p, ',')) != NULL) {
+ if (strncmp(p, rname, c - p) > 0) {
+ if (p > lname)
+ snprintf(n, l, "%.*s,%s,%s", (int) (c - lname),
+ lname, rname, c + 1);
else
- c++;
+ snprintf(n, l, "%s,%s", rname, lname);
+ return n;
}
+ p = c + 1;
}
+ snprintf(n, l, "%s,%s", lname, rname);
return n;
}
diff --git a/sql/server/rel_semantic.c b/sql/server/rel_semantic.c
--- a/sql/server/rel_semantic.c
+++ b/sql/server/rel_semantic.c
@@ -51,10 +51,8 @@ rel_parse(mvc *m, sql_schema *s, char *q
GDKfree(b);
return NULL;
}
- strncpy(n, query, len);
+ snprintf(n, len + 2, "%s\n", query);
query = n;
- query[len] = '\n';
- query[len+1] = 0;
len++;
buffer_init(b, query, len);
buf = buffer_rastream(b, "sqlstatement");
diff --git a/sql/server/rel_updates.c b/sql/server/rel_updates.c
--- a/sql/server/rel_updates.c
+++ b/sql/server/rel_updates.c
@@ -1748,10 +1748,8 @@ rel_parse_val(mvc *m, char *query, char
GDKfree(n);
return NULL;
}
- strncpy(n, query, len);
+ snprintf(n, len + 2, "%s\n", query);
query = n;
- query[len] = '\n';
- query[len+1] = 0;
len++;
buffer_init(b, query, len);
s = buffer_rastream(b, "sqlstatement");
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list