Changeset: ece5671631e0 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ece5671631e0
Modified Files:
        sql/backends/monet5/sql_cat.c
        sql/server/rel_psm.c
        sql/server/sql_privileges.c
        sql/storage/bat/bat_storage.c
Branch: default
Log Message:

Memory allocation checks


diffs (112 lines):

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
@@ -725,7 +725,8 @@ UPGcreate_func(Client cntxt, MalBlkPtr m
        if ((msg = checkSQLContext(cntxt)) != NULL)
                return msg;
        osname = cur_schema(sql)->base.name;
-       mvc_set_schema(sql, sname);
+       if (!mvc_set_schema(sql, sname))
+               throw(SQL,"sql.catalog", SQLSTATE(3F000) "Schema (%s) 
missing\n", sname);
        sa = sa_create();
        if(!sa)
                throw(SQL, "sql.catalog",SQLSTATE(HY001) MAL_MALLOC_FAIL);
@@ -735,9 +736,10 @@ UPGcreate_func(Client cntxt, MalBlkPtr m
                sql_func *func = 
(sql_func*)((stmt*)s->op1->op4.lval->t->data)->op4.aval->data.val.pval;
 
                msg = create_func(sql, schema, fname, func);
-               mvc_set_schema(sql, osname);
+               if (!mvc_set_schema(sql, osname))
+                       throw(SQL,"sql.catalog", SQLSTATE(3F000) "Schema (%s) 
missing\n", osname);
        } else {
-               mvc_set_schema(sql, osname);
+               (void) mvc_set_schema(sql, osname);
                throw(SQL, "sql.catalog", SQLSTATE(42000) "function creation 
failed '%s'", func);
        }
        return msg;
@@ -758,9 +760,9 @@ UPGcreate_view(Client cntxt, MalBlkPtr m
                return msg;
        if ((msg = checkSQLContext(cntxt)) != NULL)
                return msg;
-                                                              
        osname = cur_schema(sql)->base.name;
-       mvc_set_schema(sql, sname);
+       if (!mvc_set_schema(sql, sname))
+               throw(SQL,"sql.catalog", SQLSTATE(3F000) "Schema (%s) 
missing\n", sname);
        sa = sa_create();
        if(!sa)
                throw(SQL, "sql.catalog",SQLSTATE(HY001) MAL_MALLOC_FAIL);
@@ -771,9 +773,10 @@ UPGcreate_view(Client cntxt, MalBlkPtr m
                int temp = 
((stmt*)s->op1->op4.lval->t->data)->op4.aval->data.val.ival;
 
                msg = create_table_or_view(sql, schema, v->base.name, v, temp);
-               mvc_set_schema(sql, osname);
+               if (!mvc_set_schema(sql, osname))
+                       throw(SQL,"sql.catalog", SQLSTATE(3F000) "Schema (%s) 
missing\n", osname);
        } else {
-               mvc_set_schema(sql, osname);
+               (void) mvc_set_schema(sql, osname);
                throw(SQL, "sql.catalog", SQLSTATE(42000) "view creation failed 
'%s'", view);
        }
        return msg;
diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c
--- a/sql/server/rel_psm.c
+++ b/sql/server/rel_psm.c
@@ -939,6 +939,11 @@ rel_create_func(mvc *sql, dlist *qname, 
                                        f->mod = _STRDUP(fmod);
                                if (!f->imp || strcmp(f->imp, fnme)) 
                                        f->imp = (f->sa)?sa_strdup(f->sa, 
fnme):_STRDUP(fnme);
+                               if(!f->mod || !f->imp) {
+                                       _DELETE(f->mod);
+                                       _DELETE(f->imp);
+                                       return sql_error(sql, 02, 
SQLSTATE(HY001) "CREATE %s%s: could not allocate space", KF, F);
+                               }
                                f->sql = 0; /* native */
                                f->lang = FUNC_LANG_INT;
                        }
diff --git a/sql/server/sql_privileges.c b/sql/server/sql_privileges.c
--- a/sql/server/sql_privileges.c
+++ b/sql/server/sql_privileges.c
@@ -707,15 +707,18 @@ mvc_set_schema(mvc *m, char *schema)
 {
        int ret = 0;
        sql_schema *s = find_sql_schema(m->session->tr, schema);
+       char* new_schema_name = _STRDUP(schema);
 
-       if (s) {
+       if (s && new_schema_name) {
                if (m->session->schema_name)
                        _DELETE(m->session->schema_name);
-               m->session->schema_name = _STRDUP(schema);
+               m->session->schema_name = new_schema_name;
                m->type = Q_TRANS;
-               if (m->session->active) 
+               if (m->session->active)
                        m->session->schema = s;
                ret = 1;
+       } else if(new_schema_name) {
+               _DELETE(new_schema_name);
        }
        return ret;
 }
diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -484,6 +484,8 @@ dup_delta(sql_trans *tr, sql_delta *obat
        bat->wtime = obat->wtime;
 
        bat->name = _STRDUP(obat->name);
+       if(!bat->name)
+               return LOG_ERR;
 
        if (!bat->ibid)
                return LOG_OK;
@@ -724,6 +726,8 @@ dup_dbat( sql_trans *tr, sql_dbat *obat,
        bat->cnt = obat->cnt;
        bat->dname = _STRDUP(obat->dname);
        bat->wtime = obat->wtime;
+       if(!bat->dname)
+               return LOG_ERR;
        if (bat->dbid) {
                if (is_new) {
                        obat->dbid = temp_copy(bat->dbid, temp);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to