Changeset: 8c3652e8186f for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8c3652e8186f
Modified Files:
        clients/mapiclient/dump.c
        clients/mapilib/mapi.c
        clients/odbc/driver/ODBCConvert.c
        clients/odbc/driver/SQLExecute.c
Branch: default
Log Message:

Merge with Oct2012 branch.


diffs (178 lines):

diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -244,8 +244,13 @@ dump_foreign_keys(Mapi mid, const char *
                        "ORDER BY \"fs\".\"name\",\"fkt\".\"name\","
                              "\"fkk\".\"name\", \"nr\"";
        }
-       if ((hdl = mapi_query(mid, query)) == NULL || mapi_error(mid))
+       hdl = mapi_query(mid, query);
+       if (query != NULL && maxquerylen != 0)
+               free(query);
+       maxquerylen = 0;
+       if (hdl == NULL || mapi_error(mid))
                goto bailout;
+
        cnt = mapi_fetch_row(hdl);
        while (cnt != 0) {
                char *c_psname = mapi_fetch_field(hdl, 0);
@@ -1289,13 +1294,19 @@ dump_external_functions(Mapi mid, const 
                             " EXTERNAL NAME \"%s\".\"%s\";\n",
                             prev_f_mod, prev_f_func);
                free(prev_f_id);
+       }
+       if (prev_f_mod)
                free(prev_f_mod);
+       if (prev_f_func)
                free(prev_f_func);
+       if (prev_a_name)
                free(prev_a_name);
+       if (prev_a_type)
                free(prev_a_type);
+       if (prev_a_type_digits)
                free(prev_a_type_digits);
+       if (prev_a_type_scale)
                free(prev_a_type_scale);
-       }
 
        mapi_close_handle(hdl);
        return mnstr_errnr(toConsole) ? 1 : 0;
diff --git a/clients/mapilib/mapi.c b/clients/mapilib/mapi.c
--- a/clients/mapilib/mapi.c
+++ b/clients/mapilib/mapi.c
@@ -2282,7 +2282,8 @@ connect_to_server(Mapi mid)
                }
                memset(&userver, 0, sizeof(struct sockaddr_un));
                userver.sun_family = AF_UNIX;
-               strncpy(userver.sun_path, mid->hostname, 
sizeof(userver.sun_path));
+               strncpy(userver.sun_path, mid->hostname, 
sizeof(userver.sun_path) - 1);
+               userver.sun_path[sizeof(userver.sun_path) - 1] = 0;
                s = socket(PF_UNIX, SOCK_STREAM, 0);
 
                if (connect(s, serv, sizeof(struct sockaddr_un)) < 0) {
@@ -4540,7 +4541,7 @@ mapi_quick_response(MapiHdl hdl, FILE *f
 
        mapi_hdl_check(hdl, "mapi_quick_response");
        do {
-               if ((line = mapi_result_error(hdl)) != NULL)
+               if (mapi_result_error(hdl) != NULL)
                        mapi_explain_result(hdl, fd);
                while ((line = mapi_fetch_line(hdl)) != NULL)
                        fprintf(fd, "%s\n", line);
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
@@ -166,13 +166,16 @@ parsesecondinterval(bignum_t *nval, SQL_
        switch (type) {
        case SQL_INTERVAL_DAY:  /* SQL_C_INTERVAL_DAY */
                nval->val *= 24;
+               /* fall through */
        case SQL_INTERVAL_HOUR: /* SQL_C_INTERVAL_HOUR */
        case SQL_INTERVAL_DAY_TO_HOUR: /* SQL_C_INTERVAL_DAY_TO_HOUR */
                nval->val *= 60;
+               /* fall through */
        case SQL_INTERVAL_MINUTE: /* SQL_C_INTERVAL_MINUTE */
        case SQL_INTERVAL_HOUR_TO_MINUTE: /* SQL_C_INTERVAL_HOUR_TO_MINUTE */
        case SQL_INTERVAL_DAY_TO_MINUTE: /* SQL_C_INTERVAL_DAY_TO_MINUTE */
                nval->val *= 60;
+               /* fall through */
        case SQL_INTERVAL_SECOND: /* SQL_C_INTERVAL_SECOND */
        case SQL_INTERVAL_MINUTE_TO_SECOND: /* SQL_C_INTERVAL_MINUTE_TO_SECOND 
*/
        case SQL_INTERVAL_HOUR_TO_SECOND: /* SQL_C_INTERVAL_HOUR_TO_SECOND */
@@ -2680,12 +2683,14 @@ ODBCFetch(ODBCStmt *stmt,
 #define assign(buf,bufpos,buflen,value,stmt)                           \
                do {                                                    \
                        if (bufpos >= buflen) {                         \
-                               buf = realloc(buf, buflen += 1024);     \
-                               if (buf == NULL) {                      \
+                               char *b = realloc(buf, buflen += 1024); \
+                               if (b == NULL) {                        \
+                                       free(buf);                      \
                                        /* Memory allocation error */   \
                                        addStmtError(stmt, "HY001", NULL, 0); \
                                        return SQL_ERROR;               \
                                }                                       \
+                               buf = b;                                \
                        }                                               \
                        buf[bufpos++] = (value);                        \
                } while (0)
@@ -2694,12 +2699,14 @@ ODBCFetch(ODBCStmt *stmt,
                        size_t _len = strlen(value);                    \
                        size_t _i;                                      \
                        while (bufpos + _len >= buflen) {               \
-                               buf = realloc(buf, buflen += 1024);     \
-                               if (buf == NULL) {                      \
+                               char *b = realloc(buf, buflen += 1024); \
+                               if (b == NULL) {                        \
+                                       free(buf);                      \
                                        /* Memory allocation error */   \
                                        addStmtError(stmt, "HY001", NULL, 0); \
                                        return SQL_ERROR;               \
                                }                                       \
+                               buf = b;                                \
                        }                                               \
                        for (_i = 0; _i < _len; _i++)                   \
                                buf[bufpos++] = (value)[_i];            \
@@ -2879,7 +2886,7 @@ ODBCStore(ODBCStmt *stmt,
                nval.sign = ((SQL_NUMERIC_STRUCT *) ptr)->sign;
                nval.val = 0;
                for (i = 0; i < SQL_MAX_NUMERIC_LEN; i++)
-                       nval.val |= ((SQL_NUMERIC_STRUCT *) ptr)->val[i] << (i 
* 8);
+                       nval.val |= (SQLUBIGINT) ((SQL_NUMERIC_STRUCT *) 
ptr)->val[i] << (i * 8);
                break;
        case SQL_C_FLOAT:
                fval = * (SQLREAL *) ptr;
@@ -3013,6 +3020,7 @@ ODBCStore(ODBCStmt *stmt,
        }
 
        assigns(buf, bufpos, buflen, sep, stmt);
+       *bufp = buf;
        /* just the types supported by the server */
        switch (sqltype) {
        case SQL_CHAR:
@@ -3366,6 +3374,8 @@ ODBCStore(ODBCStmt *stmt,
 #endif
                case SQL_C_BINARY:
                        if (parsemonthintervalstring(&sval, &slen, &ival) == 
SQL_ERROR) {
+                               /* Invalid character value for cast
+                                * specification */
                                addStmtError(stmt, "22018", NULL, 0);
                                return SQL_ERROR;
                        }
@@ -3426,6 +3436,8 @@ ODBCStore(ODBCStmt *stmt,
 #endif
                case SQL_C_BINARY:
                        if (parsesecondintervalstring(&sval, &slen, &ival, 
&ivalprec) == SQL_ERROR) {
+                               /* Invalid character value for cast
+                                * specification */
                                addStmtError(stmt, "22018", NULL, 0);
                                return SQL_ERROR;
                        }
diff --git a/clients/odbc/driver/SQLExecute.c b/clients/odbc/driver/SQLExecute.c
--- a/clients/odbc/driver/SQLExecute.c
+++ b/clients/odbc/driver/SQLExecute.c
@@ -421,16 +421,21 @@ SQLExecute_(ODBCStmt *stmt)
                offset = 0;
        sep = "";
        for (i = 1; i <= stmt->nparams; i++) {
-               if (ODBCStore(stmt, i, offset, 0, &query, &querypos, &querylen, 
sep) == SQL_ERROR)
+               if (ODBCStore(stmt, i, offset, 0, &query, &querypos, &querylen, 
sep) == SQL_ERROR) {
+                       if (query)
+                               free(query);
                        return SQL_ERROR;
+               }
                sep = ",";
        }
        if (querypos + 1 >= querylen) {
-               query = realloc(query, querylen += 10);
-               if (query == NULL) {
+               char *q = realloc(query, querylen += 10);
+               if (q == NULL) {
+                       free(query);
                        addStmtError(stmt, "HY001", NULL, 0);
                        return SQL_ERROR;
                }
+               query = q;
        }
        query[querypos++] = ')';
        query[querypos] = 0;
_______________________________________________
Checkin-list mailing list
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to