Changeset: 3abadf4c1b7e for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3abadf4c1b7e Modified Files: monetdb5/optimizer/opt_mergetable.c sql/backends/monet5/UDF/pyapi/emit.c sql/backends/monet5/rel_bin.c sql/backends/monet5/sql_gencode.c sql/backends/monet5/sql_statement.c sql/common/sql_keyword.c sql/common/sql_stack.c sql/common/sql_string.c sql/common/sql_types.c sql/include/sql_keyword.h sql/server/rel_semantic.c sql/server/rel_updates.c sql/server/sql_mvc.c sql/server/sql_scan.c sql/server/sql_scan.h sql/storage/bat/bat_table.c sql/storage/store.c sql/storage/store_dependency.c sql/storage/store_sequence.c Branch: Jul2017 Log Message:
Malloc failures checks diffs (truncated from 1358 to 300 lines): diff --git a/monetdb5/optimizer/opt_mergetable.c b/monetdb5/optimizer/opt_mergetable.c --- a/monetdb5/optimizer/opt_mergetable.c +++ b/monetdb5/optimizer/opt_mergetable.c @@ -421,8 +421,9 @@ mat_apply2(matlist_t *ml, MalBlkPtr mb, { int k, is_select = isSelect(p); InstrPtr *r = NULL; - // FIXME unchecked_malloc GDKmalloc can return NULL r = (InstrPtr*) GDKmalloc(sizeof(InstrPtr)* p->retc); + if(!r) + return; for(k=0; k < p->retc; k++) { r[k] = newInstruction(mb, matRef, packRef); getArg(r[k],0) = getArg(p,k); @@ -455,13 +456,14 @@ mat_apply2(matlist_t *ml, MalBlkPtr mb, GDKfree(r); } -static void +static int mat_apply3(MalBlkPtr mb, InstrPtr p, matlist_t *ml, int m, int n, int o, int mvar, int nvar, int ovar) { int k; InstrPtr *r = NULL; - // FIXME unchecked_malloc GDKmalloc can return NULL r = (InstrPtr*) GDKmalloc(sizeof(InstrPtr)* p->retc); + if(!r) + return -1; for(k=0; k < p->retc; k++) { r[k] = newInstruction(mb, matRef, packRef); getArg(r[k],0) = getArg(p,k); @@ -489,6 +491,7 @@ mat_apply3(MalBlkPtr mb, InstrPtr p, mat pushInstruction(mb, r[k]); } GDKfree(r); + return 0; } static void @@ -693,7 +696,7 @@ join_split(Client cntxt, InstrPtr p, int * * input is one list of arguments (just total length of mats) */ -static void +static int mat_joinNxM(Client cntxt, MalBlkPtr mb, InstrPtr p, matlist_t *ml, int args) { int tpe = getArgType(mb,p, 0), j,k, nr = 1; @@ -703,6 +706,10 @@ mat_joinNxM(Client cntxt, MalBlkPtr mb, int *mats = (int*)GDKzalloc(sizeof(int) * args); int nr_mats = 0, first = 0; + if (!mats) { + return -1; + } + for(j=0;j<args;j++) { mats[j] = is_a_mat(getArg(p,p->retc+j), ml); if (mats[j] != -1) { @@ -725,7 +732,7 @@ mat_joinNxM(Client cntxt, MalBlkPtr mb, if (split < 0) { GDKfree(mats); mb->errors++; - return ; + return 0; } /* now detect split point */ for(k=1; k<mat[mv1].mi->argc; k++) { @@ -776,6 +783,7 @@ mat_joinNxM(Client cntxt, MalBlkPtr mb, mat_add(ml, l, mat_none, getFunctionId(p)); mat_add(ml, r, mat_none, getFunctionId(p)); GDKfree(mats); + return 0; } @@ -1625,7 +1633,10 @@ OPTmergetableImplementation(Client cntxt n = is_a_mat(getArg(p,p->retc+1), &ml); mat_join2(mb, p, &ml, m, n); } else { - mat_joinNxM(cntxt, mb, p, &ml, bats); + if ( mat_joinNxM(cntxt, mb, p, &ml, bats)) { + msg = createException(MAL,"optimizer.mergetable",MAL_MALLOC_FAIL); + goto cleanup; + } } actions++; continue; @@ -1831,7 +1842,10 @@ OPTmergetableImplementation(Client cntxt (n=is_a_mat(getArg(p,fn), &ml)) >= 0 && (o=is_a_mat(getArg(p,fo), &ml)) >= 0){ assert(ml.v[m].mi->argc == ml.v[n].mi->argc); - mat_apply3(mb, p, &ml, m, n, o, fm, fn, fo); + if(mat_apply3(mb, p, &ml, m, n, o, fm, fn, fo)) { + msg = createException(MAL,"optimizer.mergetable",MAL_MALLOC_FAIL); + goto cleanup; + } actions++; continue; } diff --git a/sql/backends/monet5/UDF/pyapi/emit.c b/sql/backends/monet5/UDF/pyapi/emit.c --- a/sql/backends/monet5/UDF/pyapi/emit.c +++ b/sql/backends/monet5/UDF/pyapi/emit.c @@ -138,8 +138,12 @@ PyObject *PyEmit_Emit(PyEmitObject *self if (potential_size > self->maxcols) { // allocate space for new columns (if any new columns show up) sql_emit_col *old = self->cols; - // FIXME unchecked_malloc GDKmalloc can return NULL self->cols = GDKzalloc(sizeof(sql_emit_col) * potential_size); + if (self->cols == NULL) { + PyErr_Format(PyExc_TypeError, "Out of memory error"); + error = true; + goto wrapup; + } if (old) { memcpy(self->cols, old, sizeof(sql_emit_col) * self->maxcols); GDKfree(old); 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 @@ -1037,17 +1037,19 @@ rel_parse_value(backend *be, char *query int len = _strlen(query); exp_kind ek = {type_value, card_value, FALSE}; stream *sr; + bstream *bs; m->qc = NULL; m->caching = 0; m->emode = emode; b = (buffer*)GDKmalloc(sizeof(buffer)); - if (b == 0) - return sql_error(m, 02, MAL_MALLOC_FAIL); n = GDKmalloc(len + 1 + 1); - if (n == 0) - return sql_error(m, 02, MAL_MALLOC_FAIL); + if (b == NULL || n == NULL) { + GDKfree(b); + GDKfree(n); + return sql_error(m, 02, "HY001" MAL_MALLOC_FAIL); + } strncpy(n, query, len); query = n; query[len] = '\n'; @@ -1055,7 +1057,16 @@ rel_parse_value(backend *be, char *query len++; buffer_init(b, query, len); sr = buffer_rastream(b, "sqlstatement"); - scanner_init(&m->scanner, bstream_create(sr, b->len), NULL); + if (sr == NULL) { + buffer_destroy(b); + return sql_error(m, 02, "HY001" MAL_MALLOC_FAIL); + } + bs = bstream_create(sr, b->len); + if(bs == NULL) { + buffer_destroy(b); + return sql_error(m, 02, "HY001" MAL_MALLOC_FAIL); + } + scanner_init(&m->scanner, bs, NULL); m->scanner.mode = LINE_1; bstream_next(m->scanner.rs); @@ -2844,10 +2855,10 @@ sql_parse(backend *be, sql_allocator *sa b = (buffer*)GDKmalloc(sizeof(buffer)); if (b == 0) - return sql_error(m, 02, MAL_MALLOC_FAIL); + return sql_error(m, 02, "HY001" MAL_MALLOC_FAIL); n = GDKmalloc(len + 1 + 1); if (n == 0) - return sql_error(m, 02, MAL_MALLOC_FAIL); + return sql_error(m, 02, "HY001" MAL_MALLOC_FAIL); strncpy(n, query, len); query = n; query[len] = '\n'; @@ -2857,7 +2868,7 @@ sql_parse(backend *be, sql_allocator *sa buf = buffer_rastream(b, "sqlstatement"); if(buf == NULL) { buffer_destroy(b); - return sql_error(m, 02, MAL_MALLOC_FAIL); + return sql_error(m, 02, "HY001" MAL_MALLOC_FAIL); } scanner_init( &m->scanner, bstream_create(buf, b->len), NULL); m->scanner.mode = LINE_1; @@ -2875,7 +2886,7 @@ sql_parse(backend *be, sql_allocator *sa GDKfree(query); GDKfree(b); bstream_destroy(m->scanner.rs); - return sql_error(m, 02, MAL_MALLOC_FAIL); + return sql_error(m, 02, "HY001" MAL_MALLOC_FAIL); } if (sqlparse(m) || !m->sym) { diff --git a/sql/backends/monet5/sql_gencode.c b/sql/backends/monet5/sql_gencode.c --- a/sql/backends/monet5/sql_gencode.c +++ b/sql/backends/monet5/sql_gencode.c @@ -935,8 +935,8 @@ backend_create_sql_func(backend *be, sql r = rel_parse(m, f->s, f->query, m_instantiate); if (r) { r = rel_optimizer(m, r); - r = rel_distribute(m, r); - r = rel_partition(m, r); + r = rel_distribute(m, r); + r = rel_partition(m, r); } if (r && !f->sql) /* native function */ return 0; 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 @@ -2114,20 +2114,21 @@ dump_export_header(mvc *sql, MalBlkPtr m 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); diff --git a/sql/common/sql_keyword.c b/sql/common/sql_keyword.c --- a/sql/common/sql_keyword.c +++ b/sql/common/sql_keyword.c @@ -34,19 +34,23 @@ keyword_key(char *k, int *l) return (int) ((h & 0x80000000) ? ~h + 1 : h); } -void +int keywords_insert(char *k, int token) { - // FIXME unchecked_malloc MNEW can return NULL keyword *kw = MNEW(keyword); - int len = 0; - int bucket = keyword_key(k = toLower(k), &len) & HASH_MASK; + if(kw) { + int len = 0; + int bucket = keyword_key(k = toLower(k), &len) & HASH_MASK; - kw->keyword = k; - kw->len = len; - kw->token = token; - kw->next = keywords[bucket]; - keywords[bucket] = kw; + kw->keyword = k; + kw->len = len; + kw->token = token; + kw->next = keywords[bucket]; + keywords[bucket] = kw; + return 0; + } else { + return -1; + } } keyword * diff --git a/sql/common/sql_stack.c b/sql/common/sql_stack.c --- a/sql/common/sql_stack.c +++ b/sql/common/sql_stack.c @@ -13,11 +13,17 @@ sql_stack * sql_stack_new(sql_allocator *sa, int size) { sql_stack *s = SA_NEW(sa, sql_stack); + if (s == NULL) + return NULL; s -> sa = sa; s -> size = size; s -> top = 0; - s -> values = SA_NEW_ARRAY(sa, void*, size); + s -> values = SA_NEW_ARRAY(sa, void*, size); + if (s->values == NULL) { + _DELETE(s); + return NULL; + } s -> values[s->top++] = NULL; return s; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list