Changeset: 2e8a20cb7c59 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2e8a20cb7c59
Modified Files:
monetdb5/mal/mal_import.c
monetdb5/mal/mal_parser.c
monetdb5/mal/mal_session.c
monetdb5/modules/mal/language.c
sql/backends/monet5/sql_execute.c
sql/server/sql_semantic.c
tools/mserver/mserver5.c
Branch: default
Log Message:
Check the return values of functions
diffs (233 lines):
diff --git a/monetdb5/mal/mal_import.c b/monetdb5/mal/mal_import.c
--- a/monetdb5/mal/mal_import.c
+++ b/monetdb5/mal/mal_import.c
@@ -278,7 +278,10 @@ evalFile(str fname, int listing)
MCcloseClient(c);
throw(MAL,"mal.eval","%s",msg);
}
- MSinitClientPrg(c, "user", "main");
+ if((msg = MSinitClientPrg(c, "user", "main")) != MAL_SUCCEED) {
+ MCcloseClient(c);
+ return msg;
+ }
msg = runScenario(c,0);
MCcloseClient(c);
@@ -346,7 +349,7 @@ compileString(Symbol *fcn, Client cntxt,
throw(MAL,"mal.compile","%s",msg);
}
- MSinitClientPrg(c, "user", "main"); /* create new context */
+ msg = MSinitClientPrg(c, "user", "main");/* create new context */
if(msg == MAL_SUCCEED && c->phase[MAL_SCENARIO_PARSER])
msg = (str) (*c->phase[MAL_SCENARIO_PARSER])(c);
if(msg == MAL_SUCCEED && c->phase[MAL_SCENARIO_OPTIMIZE])
@@ -372,8 +375,12 @@ callString(Client cntxt, str s, int list
s = mal_cmdline(s, &len);
qry = s;
- if (old == s)
+ if (old == s) {
qry = GDKstrdup(s);
+ if(!qry)
+ throw(MAL,"callstring", SQLSTATE(HY001)
MAL_MALLOC_FAIL);
+ }
+
mal_unquote(qry);
b = (buffer *) GDKzalloc(sizeof(buffer));
if (b == NULL){
@@ -401,7 +408,13 @@ callString(Client cntxt, str s, int list
throw(MAL,"mal.call","%s",msg);
}
- MSinitClientPrg(c, "user", "main"); /* create new context */
+ if((msg = MSinitClientPrg(c, "user", "main")) != MAL_SUCCEED) {/*
create new context */
+ c->usermodule = 0;
+ GDKfree(b);
+ GDKfree(qry);
+ MCcloseClient(c);
+ return msg;
+ }
runScenario(c,1);
// The command may have changed the environment of the calling client.
// These settings should be propagated for further use.
diff --git a/monetdb5/mal/mal_parser.c b/monetdb5/mal/mal_parser.c
--- a/monetdb5/mal/mal_parser.c
+++ b/monetdb5/mal/mal_parser.c
@@ -81,11 +81,11 @@ parseError(Client cntxt, str msg)
ssize_t i;
s= buf;
- for (t = l; *t && *t != '\n' && s < buf+sizeof(buf)-4; t++) {
- *s++ = *t;
- }
- *s++ = '\n';
- *s = 0;
+ for (t = l; *t && *t != '\n' && s < buf+sizeof(buf)-4; t++) {
+ *s++ = *t;
+ }
+ *s++ = '\n';
+ *s = 0;
line = createException( SYNTAX, "parseError", "%s", buf);
/* produce the position marker*/
@@ -1458,12 +1458,19 @@ parseEnd(Client cntxt)
errors = new;
}
}
-
- if (cntxt->backup) {
- cntxt->curprg = cntxt->backup;
- cntxt->backup = 0;
- } else {
- (void)
MSinitClientPrg(cntxt,cntxt->curmodule->name,"main");
+
+ if (cntxt->backup) {
+ cntxt->curprg = cntxt->backup;
+ cntxt->backup = 0;
+ } else {
+ str msg;
+ if((msg =
MSinitClientPrg(cntxt,cntxt->curmodule->name,"main")) != MAL_SUCCEED) {
+ if(!errors)
+ cntxt->curprg->def->errors = msg;
+ else
+ GDKfree(msg);
+ return 1;
+ }
}
// pass collected errors to context
assert(cntxt->curprg->def->errors == NULL);
diff --git a/monetdb5/mal/mal_session.c b/monetdb5/mal/mal_session.c
--- a/monetdb5/mal/mal_session.c
+++ b/monetdb5/mal/mal_session.c
@@ -47,7 +47,11 @@ malBootstrap(void)
fprintf(stderr,"#malBootstrap:Failed to initialise default
scenario");
mal_exit();
}
- MSinitClientPrg(c, "user", "main");
+ if((msg = MSinitClientPrg(c, "user", "main")) != MAL_SUCCEED) {
+ GDKfree(msg);
+ fprintf(stderr,"#malBootstrap:Failed to initialise client");
+ mal_exit();
+ }
if( MCinitClientThread(c) < 0){
fprintf(stderr,"#malBootstrap:Failed to create client thread");
mal_exit();
@@ -187,6 +191,7 @@ MSscheduleClient(str command, str challe
{
char *user = command, *algo = NULL, *passwd = NULL, *lang = NULL;
char *database = NULL, *s, *dbname;
+ str msg = MAL_SUCCEED;
Client c;
/* decode BIG/LIT:user:{cypher}passwordchal:lang:database: line */
@@ -352,7 +357,13 @@ MSscheduleClient(str command, str challe
}
}
- (void) MSinitClientPrg(c, "user", "main");
+ if((msg = MSinitClientPrg(c, "user", "main")) != MAL_SUCCEED) {
+ mnstr_printf(fout, "!could not allocate space\n");
+ exit_streams(fin, fout);
+ GDKfree(msg);
+ GDKfree(command);
+ return;
+ }
GDKfree(command);
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
@@ -115,8 +115,7 @@ CMDcallString(Client cntxt, MalBlkPtr mb
s = getArgReference_str(stk, pci, 1);
if (strlen(*s) == 0)
return MAL_SUCCEED;
- callString(cntxt, *s, FALSE);
- return MAL_SUCCEED;
+ return callString(cntxt, *s, FALSE);
}
str
@@ -131,8 +130,7 @@ CMDcallFunction(Client cntxt, MalBlkPtr
return MAL_SUCCEED;
// lazy implementation of the call
snprintf(buf,BUFSIZ,"%s.%s();",mod,fcn);
- callString(cntxt, buf, FALSE);
- return MAL_SUCCEED;
+ return callString(cntxt, buf, FALSE);
}
str
diff --git a/sql/backends/monet5/sql_execute.c
b/sql/backends/monet5/sql_execute.c
--- a/sql/backends/monet5/sql_execute.c
+++ b/sql/backends/monet5/sql_execute.c
@@ -573,7 +573,9 @@ SQLstatementIntern(Client c, str *expr,
* optimize and produce code.
* We don't search the cache for a previous incarnation yet.
*/
- MSinitClientPrg(c, "user", nme);
+ if((msg = MSinitClientPrg(c, "user", nme)) != MAL_SUCCEED) {
+ goto endofcompile;
+ }
oldvtop = c->curprg->def->vtop;
oldstop = c->curprg->def->stop;
r = sql_symbol2relation(m, m->sym);
@@ -840,7 +842,10 @@ RAstatement(Client c, MalBlkPtr mb, MalS
if (*opt)
rel = rel_optimizer(m, rel);
- MSinitClientPrg(c, "user", "test");
+ if ((msg = MSinitClientPrg(c, "user", "test")) != MAL_SUCCEED) {
+ rel_destroy(rel);
+ return msg;
+ }
/* generate MAL code, ignoring any code generation error */
if (backend_callinline(b, c) < 0 ||
diff --git a/sql/server/sql_semantic.c b/sql/server/sql_semantic.c
--- a/sql/server/sql_semantic.c
+++ b/sql/server/sql_semantic.c
@@ -372,10 +372,13 @@ char *symbol2string(mvc *sql, symbol *se
const char *seq = qname_table(se->data.lval);
const char *sname = qname_schema(se->data.lval);
const char *s;
-
+
if (!sname)
sname = sql->session->schema->base.name;
- len = snprintf( buf+len, BUFSIZ-len, "next value for
\"%s\".\"%s\"", sname, s=sql_escape_ident(seq));
+ s = sql_escape_ident(seq);
+ if(!s)
+ return NULL;
+ len = snprintf( buf+len, BUFSIZ-len, "next value for
\"%s\".\"%s\"", sname, s);
c_delete(s);
} break;
case SQL_COLUMN: {
diff --git a/tools/mserver/mserver5.c b/tools/mserver/mserver5.c
--- a/tools/mserver/mserver5.c
+++ b/tools/mserver/mserver5.c
@@ -649,11 +649,20 @@ main(int argc, char **av)
return 0;
}
- MSinitClientPrg(mal_clients, "user", "main");
+ if((err = MSinitClientPrg(mal_clients, "user", "main")) != MAL_SUCCEED)
{
+ msab_registerStop();
+ GDKfatal("%s", err);
+ GDKfree(err);
+ }
if (dbinit == NULL)
dbinit = GDKgetenv("dbinit");
- if (dbinit)
- callString(mal_clients, dbinit, listing);
+ if (dbinit) {
+ if((err = callString(mal_clients, dbinit, listing)) !=
MAL_SUCCEED) {
+ msab_registerStop();
+ GDKfatal("%s", err);
+ GDKfree(err);
+ }
+ }
emergencyBreakpoint();
for (i = 0; monet_script[i]; i++) {
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list