Changeset: b8da84a65655 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b8da84a65655
Modified Files:
        sql/backends/monet5/prog.c
        sql/backends/monet5/sql_scenario.c
        sql/backends/monet5/sql_statement.c
        sql/common/sql_list.c
        sql/common/sql_string.c
        sql/server/rel_optimizer.c
        sql/server/rel_psm.c
        sql/server/rel_rel.c
        sql/server/rel_schema.c
        sql/server/rel_select.c
        sql/server/rel_sequence.c
        sql/server/rel_trans.c
        sql/server/rel_updates.c
        sql/server/sql_parser.y
        sql/server/sql_scan.c
Branch: Jul2017
Log Message:

More malloc failure checks


diffs (truncated from 1093 to 300 lines):

diff --git a/sql/backends/monet5/prog.c b/sql/backends/monet5/prog.c
--- a/sql/backends/monet5/prog.c
+++ b/sql/backends/monet5/prog.c
@@ -7,6 +7,7 @@
  */
 
 #include <monetdb_config.h>
+#include "sql.h"
 #include "monet_options.h"
 #include "embeddedclient.h"
 
@@ -156,7 +157,7 @@ main(int argc, char **av)
        /* now for each file given on the command line (or stdin) 
           read the query and execute it
         */
-       buf = malloc(maxlen);
+       buf = GDKmalloc(maxlen);
        if (buf == NULL) {
                fprintf(stderr, "Cannot allocate memory for query buffer\n");
                return -1;
@@ -174,7 +175,7 @@ main(int argc, char **av)
                        curlen += n;
                        if (curlen + 1024 > maxlen) {
                                maxlen += 8 * BUFSIZ;
-                               buf = realloc(buf, maxlen + 1);
+                               buf = GDKrealloc(buf, maxlen + 1);
                                if (buf == NULL) {
                                        fprintf(stderr, "Cannot allocate memory 
for query buffer\n");
                                        return -1;
@@ -200,7 +201,7 @@ main(int argc, char **av)
                if (timeflag)
                        printf("Timer: "LLFMT" (usec)\n", gettime() - t0);
        }
-       free(buf);
+       GDKfree(buf);
        mapi_destroy(mid);
        return 0;
 }
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
@@ -1151,18 +1151,28 @@ SQLparser(Client c)
                        /* Add the query tree to the SQL query cache
                         * and bake a MAL program for it.
                         */
-                       char *q = query_cleaned(QUERY(m->scanner));
+                       char *q = query_cleaned(QUERY(m->scanner)), *escaped_q;
                        char qname[IDLENGTH];
+                       be->q = NULL;
+                       if(!q) {
+                               err = 1;
+                               msg = createException(PARSE, "SQLparser", 
MAL_MALLOC_FAIL);
+                       }
                        (void) snprintf(qname, IDLENGTH, "%c%d_%d", (m->emode 
== m_prepare?'p':'s'), m->qc->id++, m->qc->clientid);
-
-                       be->q = qc_insert(m->qc, m->sa, /* the allocator */
-                                         r,    /* keep relational query */
-                                         qname, /* its MAL name) */
-                                         m->sym,       /* the sql symbol tree 
*/
-                                         m->args,      /* the argument list */
-                                         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));
+                       escaped_q = sql_escape_str(q);
+                       if(!escaped_q) {
+                               err = 1;
+                               msg = createException(PARSE, "SQLparser", 
MAL_MALLOC_FAIL);
+                       } else {
+                               be->q = qc_insert(m->qc, m->sa, /* the 
allocator */
+                                                 r,    /* keep relational 
query */
+                                                 qname, /* its MAL name) */
+                                                 m->sym,       /* the sql 
symbol tree */
+                                                 m->args,      /* the argument 
list */
+                                                 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 */
+                                                 escaped_q);
+                       }
                        if(!be->q) {
                                err = 1;
                                msg = createException(PARSE, "SQLparser", 
MAL_MALLOC_FAIL);
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
@@ -925,6 +925,9 @@ stmt_result(backend *be, stmt *s, int nr
                return NULL;
 
        ns = stmt_create(be->mvc->sa, st_result);
+       if(!ns) {
+               return NULL;
+       }
        if (s->op1->type == st_join && s->op1->flag == cmp_joined) {
                assert(0);
        } else if (nr) {
@@ -2175,7 +2178,10 @@ stmt_export(backend *be, stmt *t, const 
        }
        if (q) {
                stmt *s = stmt_create(be->mvc->sa, st_export);
-
+               if(!s) {
+                       freeInstruction(q);
+                       return NULL;
+               }
                s->op1 = t;
                s->op2 = file;
                s->q = q;
@@ -2217,7 +2223,10 @@ stmt_trans(backend *be, int type, stmt *
                q = pushNil(mb, q, TYPE_str);
        if (q) {
                stmt *s = stmt_create(be->mvc->sa, st_trans);
-
+               if(!s) {
+                       freeInstruction(q);
+                       return NULL;
+               }
                s->op1 = chain;
                s->op2 = name;
                s->flag = type;
@@ -2291,7 +2300,10 @@ stmt_catalog(backend *be, int type, stmt
        }
        if (q) {
                stmt *s = stmt_create(be->mvc->sa, st_catalog);
-
+               if(!s) {
+                       freeInstruction(q);
+                       return NULL;
+               }
                if( if_exists)
                        pushInt(mb,q,1);
                s->op1 = args;
@@ -2329,6 +2341,9 @@ stmt *
 stmt_list(backend *be, list *l)
 {
        stmt *s = stmt_create(be->mvc->sa, st_list);
+       if(!s) {
+               return NULL;
+       }
        s->op4.lval = l;
        stmt_set_nrcols(s);
        return s;
@@ -2344,6 +2359,9 @@ dump_header(mvc *sql, MalBlkPtr mb, stmt
        InstrPtr p = NULL, list;
 
        list = newInstruction(mb,sqlRef, resultSetRef);
+       if(!list) {
+               return NULL;
+       }
        getArg(list,0) = newTmpVariable(mb,TYPE_int);
        k = list->argc;
        meta(tblId,TYPE_str);
@@ -2366,20 +2384,21 @@ dump_header(mvc *sql, MalBlkPtr mb, stmt
                const char *ntn = sql_escape_ident(tn);
                const char *nsn = sql_escape_ident(sn);
                size_t fqtnl;
-               char *fqtn;
+               char *fqtn = NULL;
 
                if (ntn && nsn && (fqtnl = strlen(ntn) + 1 + strlen(nsn) + 1) ){
-                       // FIXME unchecked_malloc NEW_ARRAY can return NULL
                        fqtn = NEW_ARRAY(char, fqtnl);
-                       snprintf(fqtn, fqtnl, "%s.%s", nsn, ntn);
-
-                       metaInfo(tblId,Str,fqtn);
-                       metaInfo(nmeId,Str,cn);
-                       metaInfo(tpeId,Str,(t->type->localtype == TYPE_void ? 
"char" : t->type->sqlname));
-                       metaInfo(lenId,Int,t->digits);
-                       metaInfo(scaleId,Int,t->scale);
-                       list = pushArgument(mb,list,c->nr);
-                       _DELETE(fqtn);
+                       if(fqtn) {
+                               snprintf(fqtn, fqtnl, "%s.%s", nsn, ntn);
+                               metaInfo(tblId,Str,fqtn);
+                               metaInfo(nmeId,Str,cn);
+                               metaInfo(tpeId,Str,(t->type->localtype == 
TYPE_void ? "char" : t->type->sqlname));
+                               metaInfo(lenId,Int,t->digits);
+                               metaInfo(scaleId,Int,t->scale);
+                               list = pushArgument(mb,list,c->nr);
+                               _DELETE(fqtn);
+                       } else
+                               q = NULL;
                } else
                        q = NULL;
                c_delete(ntn);
@@ -2404,7 +2423,7 @@ stmt_output(backend *be, stmt *lst)
        InstrPtr q = NULL;
        list *l = lst->op4.lval;
 
-       int cnt = list_length(l);
+       int cnt = list_length(l), ok = 0;
        stmt *first;
        node *n;
 
@@ -2423,27 +2442,34 @@ stmt_output(backend *be, stmt *lst)
                const char *cn = column_name(be->mvc->sa, c);
                const char *ntn = sql_escape_ident(tn);
                const char *nsn = sql_escape_ident(sn);
-               size_t fqtnl = strlen(ntn) + 1 + strlen(nsn) + 1;
-               // FIXME unchecked_malloc NEW_ARRAY can return NULL
-               char *fqtn = NEW_ARRAY(char, fqtnl);
-
-               snprintf(fqtn, fqtnl, "%s.%s", nsn, ntn);
-
-               q = newStmt(mb, sqlRef, resultSetRef);
-               getArg(q,0) = newTmpVariable(mb,TYPE_int);
-               if (q) {
-                       q = pushStr(mb, q, fqtn);
-                       q = pushStr(mb, q, cn);
-                       q = pushStr(mb, q, t->type->localtype == TYPE_void ? 
"char" : t->type->sqlname);
-                       q = pushInt(mb, q, t->digits);
-                       q = pushInt(mb, q, t->scale);
-                       q = pushInt(mb, q, t->type->eclass);
-                       q = pushArgument(mb, q, c->nr);
+               size_t fqtnl;
+               char *fqtn = NULL;
+
+               if(ntn && nsn) {
+                       fqtnl = strlen(ntn) + 1 + strlen(nsn) + 1;
+                       fqtn = NEW_ARRAY(char, fqtnl);
+                       if(fqtn) {
+                               ok = 1;
+                               snprintf(fqtn, fqtnl, "%s.%s", nsn, ntn);
+
+                               q = newStmt(mb, sqlRef, resultSetRef);
+                               getArg(q,0) = newTmpVariable(mb,TYPE_int);
+                               if (q) {
+                                       q = pushStr(mb, q, fqtn);
+                                       q = pushStr(mb, q, cn);
+                                       q = pushStr(mb, q, t->type->localtype 
== TYPE_void ? "char" : t->type->sqlname);
+                                       q = pushInt(mb, q, t->digits);
+                                       q = pushInt(mb, q, t->scale);
+                                       q = pushInt(mb, q, t->type->eclass);
+                                       q = pushArgument(mb, q, c->nr);
+                               }
+                       }
                }
-
                c_delete(ntn);
                c_delete(nsn);
                _DELETE(fqtn);
+               if(!ok)
+                       return NULL;
        } else {
                if ((q = dump_header(be->mvc, mb, lst, l)) == NULL) 
                        return NULL;
@@ -2478,7 +2504,10 @@ stmt_affected_rows(backend *be, stmt *l)
        be->mvc_var = getDestVar(q);
        if (q) {
                stmt *s = stmt_create(be->mvc->sa, st_affected_rows);
-
+               if(!s) {
+                       freeInstruction(q);
+                       return NULL;
+               }
                s->op1 = l;
                s->nr = getDestVar(q);
                s->q = q;
@@ -2501,7 +2530,10 @@ stmt_append(backend *be, stmt *c, stmt *
        q = pushBit(mb, q, TRUE);
        if (q) {
                stmt *s = stmt_create(be->mvc->sa, st_append);
-
+               if(!s) {
+                       freeInstruction(q);
+                       return NULL;
+               }
                s->op1 = c;
                s->op2 = a;
                s->nrcols = c->nrcols;
@@ -2523,7 +2555,10 @@ stmt_table_clear(backend *be, sql_table 
        q = pushStr(mb, q, t->base.name);
        if (q) {
                stmt *s = stmt_create(be->mvc->sa, st_table_clear);
-
+               if(!s) {
+                       freeInstruction(q);
+                       return NULL;
+               }
                s->op4.tval = t;
                s->nrcols = 0;
                s->nr = getDestVar(q);
@@ -2548,7 +2583,10 @@ stmt_exception(backend *be, stmt *cond, 
        q = pushStr(mb, q, errstr);
        if (q) {
                stmt *s = stmt_create(be->mvc->sa, st_exception);
-
+               if(!s) {
+                       freeInstruction(q);
+                       return NULL;
+               }
                assert(cond);
                s->op1 = cond;
                (void)errcode;
@@ -2650,7 +2688,10 @@ stmt_convert(backend *be, stmt *v, sql_s
        }
        if (q) {
                stmt *s = stmt_create(be->mvc->sa, st_convert);
-
+               if(!s) {
+                       freeInstruction(q);
+                       return NULL;
+               }
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to