Changeset: d467be00f866 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d467be00f866
Modified Files:
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_cat.c
        sql/backends/monet5/sql_execute.c
        sql/backends/monet5/sql_scenario.c
        sql/backends/monet5/sql_statement.c
        sql/server/sql_atom.c
        sql/server/sql_mvc.c
        sql/server/sql_qc.c
        sql/storage/bat/res_table.c
Branch: Jul2017
Log Message:

More malloc failure checks


diffs (truncated from 822 to 300 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -2855,6 +2855,10 @@ sql_parse(backend *be, sql_allocator *sa
        len++;
        buffer_init(b, query, len);
        buf = buffer_rastream(b, "sqlstatement");
+       if(buf == NULL) {
+               buffer_destroy(b);
+               return sql_error(m, 02, MAL_MALLOC_FAIL);
+       }
        scanner_init( &m->scanner, bstream_create(buf, b->len), NULL);
        m->scanner.mode = LINE_1; 
        bstream_next(m->scanner.rs);
@@ -2867,6 +2871,12 @@ sql_parse(backend *be, sql_allocator *sa
 
        /* create private allocator */
        m->sa = (sa)?sa:sa_create();
+       if (!m->sa) {
+               GDKfree(query);
+               GDKfree(b);
+               bstream_destroy(m->scanner.rs);
+               return sql_error(m, 02, MAL_MALLOC_FAIL);
+       }
 
        if (sqlparse(m) || !m->sym) {
                /* oops an error */
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -310,7 +310,11 @@ create_table_or_view(mvc *sql, char *sna
                        sql_rel *r = NULL;
 
                        sql->sa = sa_create();
+                       if(!sql->sa)
+                               throw(SQL, "sql.catalog",MAL_MALLOC_FAIL);
                        buf = sa_alloc(sql->sa, strlen(c->def) + 8);
+                       if(!buf)
+                               throw(SQL, "sql.catalog",MAL_MALLOC_FAIL);
                        snprintf(buf, BUFSIZ, "select %s;", c->def);
                        r = rel_parse(sql, s, buf, m_deps);
                        if (!r || !is_project(r->op) || !r->exps || 
list_length(r->exps) != 1 || rel_check_type(sql, &c->type, r->exps->h->data, 
type_equal) == NULL)
@@ -347,6 +351,8 @@ create_table_or_view(mvc *sql, char *sna
                sql_rel *r = NULL;
 
                sql->sa = sa_create();
+               if(!sql->sa)
+                       throw(SQL, "sql.catalog",MAL_MALLOC_FAIL);
                r = rel_parse(sql, s, nt->query, m_deps);
                if (r)
                        r = rel_optimizer(sql, r);
@@ -377,8 +383,10 @@ create_table_from_emit(Client cntxt, cha
 
        /* for some reason we don't have an allocator here so make one */
        sql->sa = sa_create();
-
-       if (!sname) 
+       if(!sql->sa)
+               throw(SQL, "sql.catalog",MAL_MALLOC_FAIL);
+
+       if (!sname)
                sname = "sys";
        if (!(s = mvc_bind_schema(sql, sname))) {
                msg = sql_error(sql, 02, "3F000!CREATE TABLE: no such schema 
'%s'", sname);
diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c
--- a/sql/backends/monet5/sql_cat.c
+++ b/sql/backends/monet5/sql_cat.c
@@ -206,7 +206,11 @@ create_trigger(mvc *sql, char *sname, ch
                sql_allocator *sa = sql->sa;
 
                sql->sa = sa_create();
+               if(!sql->sa)
+                       throw(SQL, "sql.catalog",MAL_MALLOC_FAIL);
                buf = sa_strdup(sql->sa, query);
+               if(!buf)
+                       throw(SQL, "sql.catalog",MAL_MALLOC_FAIL);
                r = rel_parse(sql, s, buf, m_deps);
                if (r)
                        r = rel_optimizer(sql, r);
@@ -516,7 +520,11 @@ create_func(mvc *sql, char *sname, char 
                sql_allocator *sa = sql->sa;
 
                sql->sa = sa_create();
+               if(!sql->sa)
+                       throw(SQL, "sql.catalog",MAL_MALLOC_FAIL);
                buf = sa_strdup(sql->sa, nf->query);
+               if(!buf)
+                       throw(SQL, "sql.catalog",MAL_MALLOC_FAIL);
                r = rel_parse(sql, s, buf, m_deps);
                if (r)
                        r = rel_optimizer(sql, r);
@@ -710,6 +718,7 @@ UPGcreate_func(Client cntxt, MalBlkPtr m
        str func = *getArgReference_str(stk, pci, 3);
        stmt *s;
        backend *be;
+       sql_allocator *sa;
 
        if ((msg = getSQLContext(cntxt, mb, &sql, &be)) != NULL)
                return msg;
@@ -717,7 +726,10 @@ UPGcreate_func(Client cntxt, MalBlkPtr m
                return msg;
        osname = cur_schema(sql)->base.name;
        mvc_set_schema(sql, sname);
-       s = sql_parse(be, sa_create(), func, 0);
+       sa = sa_create();
+       if(!sa)
+               throw(SQL, "sql.catalog",MAL_MALLOC_FAIL);
+       s = sql_parse(be, sa, func, 0);
        if (s && s->type == st_catalog) {
                char *schema = 
((stmt*)s->op1->op4.lval->h->data)->op4.aval->data.val.sval;
                sql_func *func = 
(sql_func*)((stmt*)s->op1->op4.lval->t->data)->op4.aval->data.val.pval;
@@ -740,6 +752,7 @@ UPGcreate_view(Client cntxt, MalBlkPtr m
        str view = *getArgReference_str(stk, pci, 2);
        stmt *s;
        backend *be;
+       sql_allocator *sa;
 
        if ((msg = getSQLContext(cntxt, mb, &sql, &be)) != NULL)
                return msg;
@@ -748,7 +761,10 @@ UPGcreate_view(Client cntxt, MalBlkPtr m
                                                               
        osname = cur_schema(sql)->base.name;
        mvc_set_schema(sql, sname);
-       s = sql_parse(be, sa_create(), view, 0);
+       sa = sa_create();
+       if(!sa)
+               throw(SQL, "sql.catalog",MAL_MALLOC_FAIL);
+       s = sql_parse(be, sa, view, 0);
        if (s && s->type == st_catalog) {
                char *schema = 
((stmt*)s->op1->op4.lval->h->data)->op4.aval->data.val.sval;
                sql_table *v = 
(sql_table*)((stmt*)s->op1->op4.lval->h->next->data)->op4.aval->data.val.pval;
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
@@ -499,6 +499,10 @@ SQLstatementIntern(Client c, str *expr, 
        m->session->auto_commit = 0;
        if (!m->sa)
                m->sa = sa_create();
+       if (!m->sa) {
+               bstream_destroy(m->scanner.rs);
+               throw(SQL,"sql.statement",MAL_MALLOC_FAIL);
+       }
 
        /*
         * System has been prepared to parse it and generate code.
@@ -511,6 +515,10 @@ SQLstatementIntern(Client c, str *expr, 
 
                if (!m->sa)
                        m->sa = sa_create();
+               if (!m->sa) {
+                       msg = createException(PARSE, 
"SQLparser",MAL_MALLOC_FAIL);
+                       goto endofcompile;
+               }
                m->sym = NULL;
                if ((err = sqlparse(m)) ||
                    /* Only forget old errors on transaction boundaries */
@@ -607,6 +615,10 @@ SQLstatementIntern(Client c, str *expr, 
                                res_table *res;
                                for (n = r->exps->h; n; n = n->next) ncol++;
                                res = res_table_create(m->session->tr, 
m->result_id++, 0, ncol, 1, NULL, NULL);
+                               if( res == NULL){
+                                       msg = 
createException(SQL,"SQLstatement",MAL_MALLOC_FAIL);
+                                       goto endofcompile;
+                               }
                                for (n = r->exps->h; n; n = n->next) {
                                        const char *name, *rname;
                                        sql_exp *e = n->data;
@@ -790,6 +802,8 @@ RAstatement(Client c, MalBlkPtr mb, MalS
                return msg;
        if (!m->sa)
                m->sa = sa_create();
+       if (!m->sa)
+               return createException(SQL,"RAstatement",MAL_MALLOC_FAIL);
        refs = sa_list(m->sa);
        rel = rel_read(m, *expr, &pos, refs);
        if (rel) {
@@ -855,6 +869,8 @@ RAstatement2(Client cntxt, MalBlkPtr mb,
                return msg;
        if (!m->sa)
                m->sa = sa_create();
+       if (!m->sa)
+               return createException(SQL,"RAstatement2",MAL_MALLOC_FAIL);
 
        /* keep copy of signature and relational expression */
        snprintf(buf, BUFSIZ, "%s %s", *sig, *expr);
@@ -862,7 +878,7 @@ RAstatement2(Client cntxt, MalBlkPtr mb,
        stack_push_frame(m, NULL);
        ops = sa_list(m->sa);
        while (c && *c && !isspace(*c)) {
-               char *vnme = c, *tnme; 
+               char *vnme = c, *tnme;
                char *p = strchr(++c, (int)' ');
                int d,s,nr = -1;
                sql_subtype t;
@@ -876,7 +892,8 @@ RAstatement2(Client cntxt, MalBlkPtr mb,
                p = strchr(p, (int)'(');
                *p++ = 0;
                tnme = sa_strdup(m->sa, tnme);
-
+               if (!tnme)
+                       return 
createException(SQL,"RAstatement2",MAL_MALLOC_FAIL);
                d = strtol(p, &p, 10);
                p++; /* skip , */
                s = strtol(p, &p, 10);
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
@@ -443,19 +443,37 @@ SQLinitClient(Client c)
        if (sqlinit) {          /* add sqlinit to the fdin stack */
                buffer *b = (buffer *) GDKmalloc(sizeof(buffer));
                size_t len = strlen(sqlinit);
+               char* cbuf = _STRDUP(sqlinit);
+               stream *buf;
                bstream *fdin;
 
-               if( b == NULL)
+               if( b == NULL || cbuf == NULL) {
+                       GDKfree(b);
+                       GDKfree(cbuf);
                        throw(SQL,"sql.initClient",MAL_MALLOC_FAIL);
+               }
 
-               buffer_init(b, _STRDUP(sqlinit), len);
-               fdin = bstream_create(buffer_rastream(b, "si"), b->len);
+               buffer_init(b, cbuf, len);
+               buf = buffer_rastream(b, "si");
+               if( buf == NULL) {
+                       buffer_destroy(b);
+                       throw(SQL,"sql.initClient",MAL_MALLOC_FAIL);
+               }
+
+               fdin = bstream_create(buf, b->len);
+               if( fdin == NULL) {
+                       buffer_destroy(b);
+                       throw(SQL,"sql.initClient",MAL_MALLOC_FAIL);
+               }
+
                bstream_next(fdin);
                if( MCpushClientInput(c, fdin, 0, "") < 0)
                        fprintf(stderr, "SQLinitClient:Could not switch client 
input stream");
        }
        if (c->sqlcontext == 0) {
                m = mvc_create(c->idx, 0, SQLdebug, c->fdin, c->fdout);
+               if( m == NULL)
+                       throw(SQL,"sql.initClient",MAL_MALLOC_FAIL);
                global_variables(m, "monetdb", "sys");
                if (isAdministrator(c) || strcmp(c->scenario, "msql") == 0)     
/* console should return everything */
                        m->reply_size = -1;
@@ -589,8 +607,11 @@ SQLinitClient(Client c)
        } else {                /* handle upgrades */
                if (!m->sa)
                        m->sa = sa_create();
-               if (maybeupgrade)
+               if (!m->sa) {
+                       msg = createException(MAL, "createdb", MAL_MALLOC_FAIL);
+               } else if (maybeupgrade) {
                        SQLupgrades(c,m);
+               }
                maybeupgrade = 0;
        }
        MT_lock_unset(&sql_contextLock);
@@ -1142,6 +1163,10 @@ SQLparser(Client c)
                                          m->argc, m->scanner.key ^ 
m->session->schema->base.id,        /* the statement hash key */
                                          m->emode == m_prepare ? Q_PREPARE : 
m->type,  /* the type of the statement */
                                          sql_escape_str(q));
+                       if(!be->q) {
+                               err = 1;
+                               msg = createException(PARSE, "SQLparser", 
MAL_MALLOC_FAIL);
+                       }
                        GDKfree(q);
                        scanner_query_processed(&(m->scanner));
                        be->q->code = (backend_code) backend_dumpproc(be, c, 
be->q, r);
diff --git a/sql/backends/monet5/sql_statement.c 
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -188,6 +188,8 @@ static stmt *
 stmt_create(sql_allocator *sa, st_type type)
 {
        stmt *s = SA_NEW(sa, stmt);
+       if(!s)
+               return NULL;
 
        s->type = type;
        s->op1 = NULL;
@@ -216,6 +218,8 @@ stmt_group(backend *be, stmt *s, stmt *g
                return NULL;
 
        q = newStmt(mb, groupRef, done ? grp ? subgroupdoneRef : groupdoneRef : 
grp ? subgroupRef : groupRef);
+       if(!q)
+               return NULL;
 
        /* output variables extent and hist */
        q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
@@ -225,6 +229,10 @@ stmt_group(backend *be, stmt *s, stmt *g
                q = pushArgument(mb, q, grp->nr);
        if (q) {
                stmt *ns = stmt_create(be->mvc->sa, st_group);
+               if (ns == NULL) {
+                       freeInstruction(q);
+                       return NULL;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to