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