Changeset: f4e5c2b3b9a4 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f4e5c2b3b9a4
Modified Files:
        clients/mapiclient/mclient.c
        clients/mapilib/mapi.c
        clients/odbc/driver/ODBCUtil.c
        gdk/gdk_bbp.c
        gdk/gdk_utils.c
        geom/monetdb5/geom.c
Branch: Oct2020
Log Message:

Prefer snprintf (with correct size!) over sprintf.


diffs (truncated from 439 to 300 lines):

diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c
--- a/clients/mapiclient/mclient.c
+++ b/clients/mapiclient/mclient.c
@@ -77,7 +77,7 @@ static char *encoding;
 static bool errseen = false;
 static bool allow_remote = false;
 
-#define setPrompt() sprintf(promptbuf, "%.*s>", (int) sizeof(promptbuf) - 2, 
language)
+#define setPrompt() snprintf(promptbuf, sizeof(promptbuf), "%.*s>", (int) 
sizeof(promptbuf) - 2, language)
 #define debugMode() (strncmp(promptbuf, "mdb", 3) == 0)
 
 /* the internal result set formatters */
@@ -335,7 +335,7 @@ fetch_line(MapiHdl hdl)
                if (strncmp(reply, "mdb>#EOD", 8) == 0)
                        setPrompt();
                else
-                       sprintf(promptbuf, "mdb>");
+                       snprintf(promptbuf, sizeof(promptbuf), "mdb>");
        }
        return reply;
 }
@@ -1352,7 +1352,7 @@ SQLdebugRendering(MapiHdl hdl)
        char *reply;
        int cnt = 0;
 
-       sprintf(promptbuf, "mdb>");
+       snprintf(promptbuf, sizeof(promptbuf), "mdb>");
        while ((reply = fetch_line(hdl))) {
                cnt++;
                mnstr_printf(toConsole, "%s\n", reply);
diff --git a/clients/mapilib/mapi.c b/clients/mapilib/mapi.c
--- a/clients/mapilib/mapi.c
+++ b/clients/mapilib/mapi.c
@@ -3403,55 +3403,55 @@ mapi_param_store(MapiHdl hdl)
                        switch (hdl->params[i].intype) {
                        case MAPI_TINY:
                                checkSpace(5);
-                               sprintf(hdl->query + k, "%hhd", *(signed char 
*) src);
+                               snprintf(hdl->query + k, lim - k, "%hhd", 
*(signed char *) src);
                                break;
                        case MAPI_UTINY:
                                checkSpace(5);
-                               sprintf(hdl->query + k, "%hhu", *(unsigned char 
*) src);
+                               snprintf(hdl->query + k, lim - k, "%hhu", 
*(unsigned char *) src);
                                break;
                        case MAPI_SHORT:
                                checkSpace(10);
-                               sprintf(hdl->query + k, "%hd", *(short *) src);
+                               snprintf(hdl->query + k, lim - k, "%hd", 
*(short *) src);
                                break;
                        case MAPI_USHORT:
                                checkSpace(10);
-                               sprintf(hdl->query + k, "%hu", *(unsigned short 
*) src);
+                               snprintf(hdl->query + k, lim - k, "%hu", 
*(unsigned short *) src);
                                break;
                        case MAPI_INT:
                                checkSpace(20);
-                               sprintf(hdl->query + k, "%d", *(int *) src);
+                               snprintf(hdl->query + k, lim - k, "%d", *(int 
*) src);
                                break;
                        case MAPI_UINT:
                                checkSpace(20);
-                               sprintf(hdl->query + k, "%u", *(unsigned int *) 
src);
+                               snprintf(hdl->query + k, lim - k, "%u", 
*(unsigned int *) src);
                                break;
                        case MAPI_LONG:
                                checkSpace(20);
-                               sprintf(hdl->query + k, "%ld", *(long *) src);
+                               snprintf(hdl->query + k, lim - k, "%ld", *(long 
*) src);
                                break;
                        case MAPI_ULONG:
                                checkSpace(20);
-                               sprintf(hdl->query + k, "%lu", *(unsigned long 
*) src);
+                               snprintf(hdl->query + k, lim - k, "%lu", 
*(unsigned long *) src);
                                break;
                        case MAPI_LONGLONG:
                                checkSpace(30);
-                               sprintf(hdl->query + k, "%"PRId64, *(int64_t *) 
src);
+                               snprintf(hdl->query + k, lim - k, "%"PRId64, 
*(int64_t *) src);
                                break;
                        case MAPI_ULONGLONG:
                                checkSpace(30);
-                               sprintf(hdl->query + k, "%"PRIu64, *(uint64_t 
*) src);
+                               snprintf(hdl->query + k, lim - k, "%"PRIu64, 
*(uint64_t *) src);
                                break;
                        case MAPI_FLOAT:
                                checkSpace(30);
-                               sprintf(hdl->query + k, "%.9g", *(float *) src);
+                               snprintf(hdl->query + k, lim - k, "%.9g", 
*(float *) src);
                                break;
                        case MAPI_DOUBLE:
                                checkSpace(30);
-                               sprintf(hdl->query + k, "%.17g", *(double *) 
src);
+                               snprintf(hdl->query + k, lim - k, "%.17g", 
*(double *) src);
                                break;
                        case MAPI_DATE:
                                checkSpace(50);
-                               sprintf(hdl->query + k,
+                               snprintf(hdl->query + k, lim - k,
                                        "DATE '%04hd-%02hu-%02hu'",
                                        ((MapiDate *) src)->year,
                                        ((MapiDate *) src)->month,
@@ -3459,7 +3459,7 @@ mapi_param_store(MapiHdl hdl)
                                break;
                        case MAPI_TIME:
                                checkSpace(60);
-                               sprintf(hdl->query + k,
+                               snprintf(hdl->query + k, lim - k,
                                        "TIME '%02hu:%02hu:%02hu'",
                                        ((MapiTime *) src)->hour,
                                        ((MapiTime *) src)->minute,
@@ -3467,7 +3467,7 @@ mapi_param_store(MapiHdl hdl)
                                break;
                        case MAPI_DATETIME:
                                checkSpace(110);
-                               sprintf(hdl->query + k,
+                               snprintf(hdl->query + k, lim - k,
                                        "TIMESTAMP '%04hd-%02hu-%02hu 
%02hu:%02hu:%02hu.%09u'",
                                        ((MapiDateTime *) src)->year,
                                        ((MapiDateTime *) src)->month,
@@ -3493,7 +3493,7 @@ mapi_param_store(MapiHdl hdl)
                                        }
                                        hdl->query = q;
                                }
-                               sprintf(hdl->query + k, "'%s'", val);
+                               snprintf(hdl->query + k, lim - k, "'%s'", val);
                                free(val);
                                break;
                        case MAPI_VARCHAR:
@@ -3510,11 +3510,11 @@ mapi_param_store(MapiHdl hdl)
                                        }
                                        hdl->query = q;
                                }
-                               sprintf(hdl->query + k, "'%s'", val);
+                               snprintf(hdl->query + k, lim - k, "'%s'", val);
                                free(val);
                                break;
                        default:
-                               strcpy(hdl->query + k, src);
+                               strcpy_len(hdl->query + k, src, lim - k);
                                break;
                        }
                }
diff --git a/clients/odbc/driver/ODBCUtil.c b/clients/odbc/driver/ODBCUtil.c
--- a/clients/odbc/driver/ODBCUtil.c
+++ b/clients/odbc/driver/ODBCUtil.c
@@ -942,12 +942,13 @@ ODBCTranslateSQL(ODBCDbc *dbc, const SQL
                        }
                        n = (int) (q - nquery);
                        pr = (int) (p - q);
-                       q = malloc(length - pr + strlen(buf) + 1);
+                       length += strlen(buf) + 1 - pr;
+                       q = malloc(length);
                        if (q == NULL) {
                                free(nquery);
                                return NULL;
                        }
-                       length = (size_t) sprintf(q, "%.*s%s%s", n, nquery, 
buf, p);
+                       length = (size_t) snprintf(q, length, "%.*s%s%s", n, 
nquery, buf, p);
                        free(nquery);
                        nquery = q;
                        q += n;
@@ -982,12 +983,13 @@ ODBCTranslateSQL(ODBCDbc *dbc, const SQL
                        }
                        n = (int) (q - nquery);
                        pr = (int) (p - q);
-                       q = malloc(length - pr + strlen(buf) + 1);
+                       length += strlen(buf) + 1 - pr;
+                       q = malloc(length);
                        if (q == NULL) {
                                free(nquery);
                                return NULL;
                        }
-                       length = (size_t) sprintf(q, "%.*s%s%s", n, nquery, 
buf, p);
+                       length = (size_t) snprintf(q, length, "%.*s%s%s", n, 
nquery, buf, p);
                        free(nquery);
                        nquery = q;
                        q += n;
@@ -1002,12 +1004,13 @@ ODBCTranslateSQL(ODBCDbc *dbc, const SQL
                                 "DATE '%04u-%02u-%02u'", yr, mt, dy);
                        n = (int) (q - nquery);
                        pr = (int) (p - q);
-                       q = malloc(length - pr + strlen(buf) + 1);
+                       length += strlen(buf) + 1 - pr;
+                       q = malloc(length);
                        if (q == NULL) {
                                free(nquery);
                                return NULL;
                        }
-                       length = (size_t) sprintf(q, "%.*s%s%s", n, nquery, 
buf, p);
+                       length = (size_t) snprintf(q, length, "%.*s%s%s", n, 
nquery, buf, p);
                        free(nquery);
                        nquery = q;
                        q += n;
@@ -1024,12 +1027,13 @@ ODBCTranslateSQL(ODBCDbc *dbc, const SQL
                        p++;
                        n = (int) (q - nquery);
                        pr = (int) (p - q);
-                       q = malloc(length - pr + intvl + 1);
+                       length += intvl + 1 - pr;
+                       q = malloc(length);
                        if (q == NULL) {
                                free(nquery);
                                return NULL;
                        }
-                       length = (size_t) sprintf(q, "%.*s%.*s%s", n, nquery, 
(int) intvl, intv, p);
+                       length = (size_t) snprintf(q, length, "%.*s%.*s%s", n, 
nquery, (int) intvl, intv, p);
                        free(nquery);
                        nquery = q;
                        q += n;
@@ -1053,12 +1057,13 @@ ODBCTranslateSQL(ODBCDbc *dbc, const SQL
                                 u.d4[3], u.d4[4], u.d4[5], u.d4[6], u.d4[7]);
                        n = (int) (q - nquery);
                        pr = (int) (p - q);
-                       q = malloc(length - pr + strlen(buf) + 1);
+                       length += strlen(buf) + 1 - pr;
+                       q = malloc(length);
                        if (q == NULL) {
                                free(nquery);
                                return NULL;
                        }
-                       length = (size_t) sprintf(q, "%.*s%s%s", n, nquery, 
buf, p);
+                       length = (size_t) snprintf(q, length, "%.*s%s%s", n, 
nquery, buf, p);
                        free(nquery);
                        nquery = q;
                        q += n;
@@ -1090,20 +1095,21 @@ ODBCTranslateSQL(ODBCDbc *dbc, const SQL
                                continue;
                        n = (int) (q - nquery);
                        pr = (int) (p - q);
-                       q = malloc(length - pr + 13 + 1);
+                       length += 13 + 1 - pr;
+                       q = malloc(length);
                        if (q == NULL) {
                                free(nquery);
                                return NULL;
                        }
                        switch (esc) {
                        case '\'':
-                               length = (size_t) sprintf(q, "%.*s ESCAPE '''' 
%s", n, nquery, p);
+                               length = (size_t) snprintf(q, length, "%.*s 
ESCAPE '''' %s", n, nquery, p);
                                break;
                        case '\\':
-                               length = (size_t) sprintf(q, "%.*s ESCAPE r'\\' 
%s", n, nquery, p);
+                               length = (size_t) snprintf(q, length, "%.*s 
ESCAPE r'\\' %s", n, nquery, p);
                                break;
                        default:
-                               length = (size_t) sprintf(q, "%.*s ESCAPE '%c' 
%s", n, nquery, esc, p);
+                               length = (size_t) snprintf(q, length, "%.*s 
ESCAPE '%c' %s", n, nquery, esc, p);
                                break;
                        }
                        free(nquery);
@@ -1149,12 +1155,13 @@ ODBCTranslateSQL(ODBCDbc *dbc, const SQL
                        p++;
                        n = (int) (q - nquery);
                        pr = (int) (p - q);
-                       q = malloc(length - pr + (procend - proc) + 6);
+                       length += (procend - proc) + 6 - pr;
+                       q = malloc(length);
                        if (q == NULL) {
                                free(nquery);
                                return NULL;
                        }
-                       length = (size_t) sprintf(q, "%.*scall %.*s%s", n, 
nquery, (int) (procend - proc), proc, p);
+                       length = (size_t) snprintf(q, length, "%.*scall 
%.*s%s", n, nquery, (int) (procend - proc), proc, p);
                        free(nquery);
                        nquery = q;
                        q += n;
@@ -1262,22 +1269,24 @@ ODBCTranslateSQL(ODBCDbc *dbc, const SQL
                                                nquery = q;
                                                q += n;
                                        } else if (strcmp(func->name, "user") 
== 0) {
-                                               q = malloc(length - pr + 
(dbc->Connected && dbc->uid ? strlen(dbc->uid) : 0) + 3);
+                                               length += (dbc->Connected && 
dbc->uid ? strlen(dbc->uid) : 0) + 3 - pr;
+                                               q = malloc(length);
                                                if (q == NULL) {
                                                        free(nquery);
                                                        return NULL;
                                                }
-                                               length = (size_t) sprintf(q, 
"%.*s'%s'%s", n, nquery, dbc->Connected && dbc->uid ? dbc->uid : "", p);
+                                               length = (size_t) snprintf(q, 
length, "%.*s'%s'%s", n, nquery, dbc->Connected && dbc->uid ? dbc->uid : "", p);
                                                free(nquery);
                                                nquery = q;
                                                q += n;
                                        } else if (strcmp(func->name, 
"database") == 0) {
-                                               q = malloc(length - pr + 
(dbc->Connected && dbc->dbname ? strlen(dbc->dbname) : 0) + 3);
+                                               length += (dbc->Connected && 
dbc->dbname ? strlen(dbc->dbname) : 0) + 3 - pr;
+                                               q = malloc(length);
                                                if (q == NULL) {
                                                        free(nquery);
                                                        return NULL;
                                                }
-                                               length = (size_t) sprintf(q, 
"%.*s'%s'%s", n, nquery, dbc->Connected && dbc->dbname ? dbc->dbname : "", p);
+                                               length = (size_t) snprintf(q, 
length, "%.*s'%s'%s", n, nquery, dbc->Connected && dbc->dbname ? dbc->dbname : 
"", p);
                                                free(nquery);
                                                nquery = q;
                                                q += n;
@@ -1287,7 +1296,8 @@ ODBCTranslateSQL(ODBCDbc *dbc, const SQL
                                                        if 
(strncasecmp(c->odbc, args[1].argstart, args[1].arglen) == 0 &&
                                                            
c->odbc[args[1].arglen] == 0) {
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to