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