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