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
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list