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

Reply via email to