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

Reply via email to