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

Reply via email to