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