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