Changeset: 1613b618c34c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1613b618c34c
Modified Files:
        monetdb5/mal/mal_builder.c
        monetdb5/mal/mal_function.c
        monetdb5/mal/mal_instruction.c
        monetdb5/modules/mal/language.c
        monetdb5/optimizer/opt_multiplex.c
        monetdb5/optimizer/opt_remap.c
        sql/backends/monet5/sql_scenario.c
Branch: Jul2017
Log Message:

Check the output of registering a name in the MAL namespace


diffs (151 lines):

diff --git a/monetdb5/mal/mal_builder.c b/monetdb5/mal/mal_builder.c
--- a/monetdb5/mal/mal_builder.c
+++ b/monetdb5/mal/mal_builder.c
@@ -38,8 +38,13 @@ newAssignment(MalBlkPtr mb)
 InstrPtr
 newStmt(MalBlkPtr mb, const char *module, const char *name)
 {
-       InstrPtr q = newInstruction(mb, putName(module), putName(name));
+       InstrPtr q;
+       str mName = putName(module), nName = putName(name);
 
+       if(mName == NULL || nName == NULL) {
+               return NULL;
+       }
+       q = newInstruction(mb, mName, nName);
        if ( q == NULL)
                return NULL;
        setDestVar(q, newTmpVariable(mb, TYPE_any));
@@ -71,11 +76,18 @@ InstrPtr
 newFcnCall(MalBlkPtr mb, char *mod, char *fcn)
 {
        InstrPtr q = newAssignment(mb);
+       str fcnName, modName;
 
        if ( q == NULL || mod == NULL || fcn == NULL)
                return NULL;
-       setModuleId(q, putName(mod));
-       setFunctionId(q, putName(fcn));
+       modName = putName(mod);
+       fcnName = putName(fcn);
+       if(modName == NULL || fcnName == NULL) {
+               freeInstruction(q);
+               return NULL;
+       }
+       setModuleId(q, modName);
+       setFunctionId(q, fcnName);
        return q;
 }
 
diff --git a/monetdb5/mal/mal_function.c b/monetdb5/mal/mal_function.c
--- a/monetdb5/mal/mal_function.c
+++ b/monetdb5/mal/mal_function.c
@@ -23,6 +23,9 @@ Symbol newFunction(str mod, str nme,int 
        InstrPtr p;
        int varid;
 
+       if(mod == NULL || nme == NULL)
+               return NULL;
+
        s = newSymbol(nme,kind);
        if (s == NULL)
                return NULL;
diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c
--- a/monetdb5/mal/mal_instruction.c
+++ b/monetdb5/mal/mal_instruction.c
@@ -29,6 +29,10 @@ newSymbol(str nme, int kind)
        if (cur == NULL)
                return NULL;
        cur->name = putName(nme);
+       if(cur->name == NULL) {
+               GDKfree(cur);
+               return NULL;
+       }
        cur->kind = kind;
        cur->peer = NULL;
        cur->def = newMalBlk(kind == FUNCTIONsymbol? STMT_INCREMENT : 2);
diff --git a/monetdb5/modules/mal/language.c b/monetdb5/modules/mal/language.c
--- a/monetdb5/modules/mal/language.c
+++ b/monetdb5/modules/mal/language.c
@@ -180,18 +180,26 @@ CMDregisterFunction(Client cntxt, MalBlk
        str *code = getArgReference_str(stk,pci,3);
        str *help = getArgReference_str(stk,pci,4);
        InstrPtr sig;
-       str msg;
+       str msg, fcnName, modName, ahelp;
 
        msg= compileString(&sym, cntxt,*code);
        if( sym) {
                mnstr_printf(cntxt->fdout,"#register FUNCTION %s.%s\n",
                        getModuleId(sym->def->stmt[0]), 
getFunctionId(sym->def->stmt[0]));
                mb= sym->def;
+               fcnName = putName(*fcn);
+               modName = putName(*mod);
+               ahelp = GDKstrdup(*help);
+               if(fcnName == NULL || modName == NULL || help == NULL) {
+                       freeSymbol(sym);
+                       GDKfree(ahelp);
+                       throw(MAL, "language.register", MAL_MALLOC_FAIL);
+               }
                if( help)
-                       mb->help= GDKstrdup(*help);
+                       mb->help= ahelp;
                sig= getSignature(sym);
-               sym->name= putName(*fcn);
-               setModuleId(sig, putName(*mod));
+               sym->name= fcnName;
+               setModuleId(sig, modName);
                setFunctionId(sig, sym->name);
                insertSymbol(findModule(cntxt->nspace, getModuleId(sig)), sym);
        }
diff --git a/monetdb5/optimizer/opt_multiplex.c 
b/monetdb5/optimizer/opt_multiplex.c
--- a/monetdb5/optimizer/opt_multiplex.c
+++ b/monetdb5/optimizer/opt_multiplex.c
@@ -57,6 +57,8 @@ OPTexpandMultiplex(Client cntxt, MalBlkP
        mod = putName(mod);
        fcn = VALget(&getVar(mb, getArg(pci, pci->retc+1))->value);
        fcn = putName(fcn);
+       if(mod == NULL || fcn == NULL)
+               throw(MAL, "optimizer.multiplex", MAL_MALLOC_FAIL);
 #ifndef NDEBUG
        fprintf(stderr,"#WARNING To speedup %s.%s a bulk operator 
implementation is needed\n#", mod,fcn);
        fprintInstruction(stderr, mb, stk, pci, LIST_MAL_DEBUG);
diff --git a/monetdb5/optimizer/opt_remap.c b/monetdb5/optimizer/opt_remap.c
--- a/monetdb5/optimizer/opt_remap.c
+++ b/monetdb5/optimizer/opt_remap.c
@@ -23,6 +23,7 @@ OPTremapDirect(Client cntxt, MalBlkPtr m
        char buf[1024];
        int i, retc = pci->retc;
        InstrPtr p;
+       str bufName, fcnName;
 
        (void) stk;
        mod = VALget(&getVar(mb, getArg(pci, retc+0))->value);
@@ -35,7 +36,12 @@ OPTremapDirect(Client cntxt, MalBlkPtr m
 #endif
 
        snprintf(buf,1024,"bat%s",mod);
-       p= newInstruction(mb, putName(buf), putName(fcn));
+       bufName = putName(buf);
+       fcnName = putName(fcn);
+       if(bufName == NULL || fcnName == NULL)
+               return 0;
+
+       p= newInstruction(mb, bufName, fcnName);
 
        for(i=0; i<pci->retc; i++)
                if (i<1)
diff --git a/sql/backends/monet5/sql_scenario.c 
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -1189,6 +1189,10 @@ SQLparser(Client c)
                        m->sym = NULL;
                        /* register name in the namespace */
                        be->q->name = putName(be->q->name);
+                       if(!be->q->name) {
+                               err = 1;
+                               msg = createException(PARSE, "SQLparser", 
MAL_MALLOC_FAIL);
+                       }
                }
        }
        if (err)
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to