Changeset: 681ea997d2cd for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=681ea997d2cd
Modified Files:
        sql/backends/monet5/sql_execute.c
        sql/backends/monet5/sql_statistics.c
Branch: default
Log Message:

Defense line against malloc failure


diffs (54 lines):

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
@@ -385,7 +385,7 @@ SQLstatementIntern(Client c, str *expr, 
        ac = m->session->auto_commit;
        o = MNEW(mvc);
        if (!o)
-               throw(SQL, "SQLstatement", "Out of memory");
+               throw(SQL, "SQLstatement", MAL_MALLOC_FAIL);
        *o = *m;
        /* hide query cache, this causes crashes in SQLtrans() due to 
uninitialized memory otherwise */
        m->qc = NULL;
@@ -545,15 +545,20 @@ SQLstatementIntern(Client c, str *expr, 
                                        const char *name, *rname;
                                        sql_exp *e = n->data;
                                        sql_subtype *t = exp_subtype(e);
+                                       void *ptr =ATOMnil(t->type->localtype);
+
+                                       if( ptr == NULL){
+                                               msg = 
createException(SQL,"SQLstatement",MAL_MALLOC_FAIL);
+                                               goto endofcompile;
+                                       }
                                        name = e->name;
                                        if (!name && e->type == e_column && 
e->r)
                                                name = e->r;
                                        rname = e->rname;
                                        if (!rname && e->type == e_column && 
e->l)
                                                rname = e->l;
-                                       // FIXME unchecked_malloc ATOMnil can 
return NULL
                                        res_col_create(m->session->tr, res, 
rname, name, t->type->sqlname, t->digits,
-                                                       t->scale, 
t->type->localtype, ATOMnil(t->type->localtype));
+                                                       t->scale, 
t->type->localtype, ptr);
                                }
                                *result = res;
                        }
diff --git a/sql/backends/monet5/sql_statistics.c 
b/sql/backends/monet5/sql_statistics.c
--- a/sql/backends/monet5/sql_statistics.c
+++ b/sql/backends/monet5/sql_statistics.c
@@ -179,7 +179,6 @@ sql_analyze(Client cntxt, MalBlkPtr mb, 
 
                                                if (maxlen < 4) {
                                                        GDKfree(maxval);
-                                                       // FIXME 
unchecked_malloc GDKmalloc can return NULL
                                                        maxval = GDKmalloc(4);
                                                        if( maxval== NULL)
                                                                GDKfree(dquery);
@@ -188,7 +187,6 @@ sql_analyze(Client cntxt, MalBlkPtr mb, 
                                                }
                                                if (minlen < 4) {
                                                        GDKfree(minval);
-                                                       // FIXME 
unchecked_malloc GDKmalloc can return NULL
                                                        minval = GDKmalloc(4);
                                                        if( minval== NULL){
                                                                GDKfree(dquery);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to