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

Reply via email to