Changeset: f5fd1e6208ba for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/f5fd1e6208ba
Modified Files:
tools/monetdbe/monetdbe.c
Branch: default
Log Message:
Allocation checks
diffs (117 lines):
diff --git a/tools/monetdbe/monetdbe.c b/tools/monetdbe/monetdbe.c
--- a/tools/monetdbe/monetdbe.c
+++ b/tools/monetdbe/monetdbe.c
@@ -1251,9 +1251,9 @@ monetdbe_prepare_cb(void* context, char*
sql_type *t = SA_ZNEW(sa, sql_type);
char* name = BUNtvar(btype_iter, i);
- t->base.name = GDKstrdup(name);
+ t->base.name = SA_STRDUP(sa, name);
char* impl = BUNtvar(bimpl_iter, i);
- t->impl = GDKstrdup(impl);
+ t->impl = SA_STRDUP(sa, impl);
t->localtype = ATOMindex(t->impl);
sql_subtype *st = SA_ZNEW(sa, sql_subtype);
@@ -1353,15 +1353,16 @@ monetdbe_query_remote(monetdbe_database_
}
MalBlkPtr mb = prg->def;
-
- InstrPtr f = getInstrPtr(mb, 0);
+ ValRecord v;
+ ptr vp;
+ columnar_result_callback* rcb;
+ InstrPtr f = getInstrPtr(mb, 0), r, p, e, o;
+
f->retc = f->argc = 0;
-
- InstrPtr o = newStmt(mb, remoteRef, putRef);
+ o = newStmt(mb, remoteRef, putRef);
o = pushStr(mb, o, mdbe->mid);
o = pushBit(mb, o, TRUE);
-
if (prepare_id) {
size_t query_len, input_query_len, prep_len = 0;
input_query_len = strlen(query);
@@ -1372,7 +1373,7 @@ monetdbe_query_remote(monetdbe_database_
char *nq = NULL;
if (!(nq = GDKmalloc(query_len))) {
set_error(mdbe, createException(MAL,
"monetdbe.monetdbe_query_remote", "Could not setup query stream"));
- return mdbe->msg;
+ goto finalize;
}
strcpy(nq, PREPARE);
strcpy(nq + prep_len, query);
@@ -1380,12 +1381,12 @@ monetdbe_query_remote(monetdbe_database_
query = nq;
}
- InstrPtr p = newStmt(mb, remoteRef, putRef);
+ p = newStmt(mb, remoteRef, putRef);
p = pushStr(mb, p, mdbe->mid);
p = pushStr(mb, p, query);
- InstrPtr e = newInstruction(mb, remoteRef, execRef);
+ e = newInstruction(mb, remoteRef, execRef);
setDestVar(e, newTmpVariable(mb, TYPE_any));
e = pushStr(mb, e, mdbe->mid);
e = pushStr(mb, e, sqlRef);
@@ -1395,7 +1396,12 @@ monetdbe_query_remote(monetdbe_database_
* prepare the call back routine and its context
* and pass it over as a pointer to remote.exec.
*/
- columnar_result_callback* rcb =
GDKzalloc(sizeof(columnar_result_callback));
+ rcb = GDKzalloc(sizeof(columnar_result_callback));
+ if (!rcb) {
+ set_error(mdbe, createException(MAL,
"monetdbe.monetdbe_query_remote", "Could not setup query stream"));
+ goto finalize;
+ }
+
if (!prepare_id) {
struct callback_context* ccontext;
ccontext = GDKzalloc(sizeof(struct
callback_context));
@@ -1411,10 +1417,13 @@ monetdbe_query_remote(monetdbe_database_
rcb->context = ccontext;
rcb->call = monetdbe_prepare_cb;
}
-
- ValRecord v;
- ptr vp = (ptr) rcb;
-
+ if (!rcb->context) {
+ GDKfree(rcb);
+ set_error(mdbe, createException(MAL,
"monetdbe.monetdbe_query_remote", "Could not setup query stream"));
+ goto finalize;
+ }
+
+ vp = (ptr) rcb;
VALset(&v, TYPE_ptr, &vp);
e = pushValue(mb, e, &v);
@@ -1423,7 +1432,7 @@ monetdbe_query_remote(monetdbe_database_
pushInstruction(mb, e);
- InstrPtr r = newInstruction(mb, NULL, NULL);
+ r = newInstruction(mb, NULL, NULL);
r->barrier= RETURNsymbol;
r->argc= r->retc=0;
pushInstruction(mb, r);
@@ -1586,7 +1595,13 @@ monetdbe_bind(monetdbe_statement *stmt,
}
VALset(&stmt_internal->data[i], tpe, b);
} else if (tpe == TYPE_str) {
- VALset(&stmt_internal->data[i], tpe, GDKstrdup(data));
+ char *val = GDKstrdup(data);
+
+ if (val == NULL) {
+ set_error(stmt_internal->mdbe, createException(MAL,
"monetdbe.monetdbe_bind", MAL_MALLOC_FAIL));
+ return stmt_internal->mdbe->msg;
+ }
+ VALset(&stmt_internal->data[i], tpe, val);
} else {
VALset(&stmt_internal->data[i], tpe, data);
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list