Changeset: 85457439b61c for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=85457439b61c
Modified Files:
sql/server/rel_schema.c
Branch: sciql
Log Message:
add checks to the results of sql_bind_func_ to prevent segmentation fault when
the function is not found
diffs (35 lines):
diff --git a/sql/server/rel_schema.c b/sql/server/rel_schema.c
--- a/sql/server/rel_schema.c
+++ b/sql/server/rel_schema.c
@@ -1037,6 +1037,7 @@ rel_create_table(mvc *sql, sql_schema *s
list *args = new_exp_list(sql->sa), *col_exps =
new_exp_list(sql->sa);
sql_exp *e = NULL, *func_exp = NULL;
sql_subtype *oid_tpe = sql_bind_localtype("oid");
+ sql_subfunc *sf = NULL;
if (sc->dim){
/* TODO: can we avoid computing these
'atom_general' twice? */
@@ -1045,7 +1046,10 @@ rel_create_table(mvc *sql, sql_schema *s
append(args, exp_atom(sql->sa,
atom_general(sql->sa, &sc->type, sc->dim->stop)));
append(args, exp_atom_int(sql->sa, N[i]));
append(args, exp_atom_int(sql->sa, M[i]));
- func_exp = exp_op(sql->sa, args,
sql_bind_func_(sql->sa, sql->session->schema, "array_series",
exps_subtype(args), F_FUNC));
+ sf = sql_bind_func_(sql->sa,
sql->session->schema, "array_series", exps_subtype(args), F_FUNC);
+ if (!sf)
+ return sql_error(sql, 02, "failed to
bind to the SQL function \"array_series\"");
+ func_exp = exp_op(sql->sa, args, sf);
/* TODO: what are the correct values for card
and intern? */
if (!id_l) {
id_l = exp_column(sql->sa,
sc->base.name, "id", oid_tpe, CARD_MULTI, (!sc->dim && !sc->def)?1:0, 0);
@@ -1070,7 +1074,10 @@ rel_create_table(mvc *sql, sql_schema *s
}
append(args, exp_atom_lng(sql->sa, cntall));
append(args, e);
- func_exp = exp_op(sql->sa, args,
sql_bind_func_(sql->sa, sql->session->schema, "array_filler",
exps_subtype(args), F_FUNC));
+ sf = sql_bind_func_(sql->sa,
sql->session->schema, "array_filler", exps_subtype(args), F_FUNC);
+ if (!sf)
+ return sql_error(sql, 02, "failed to
bind to the SQL function \"array_filler\"");
+ func_exp = exp_op(sql->sa, args, sf);
if (!id_l) {
id_l = exp_column(sql->sa,
sc->base.name, "id", oid_tpe, CARD_MULTI, (!sc->dim && !sc->def)?1:0, 0);
append(col_exps, id_l);
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list