From 369e484677310a6cd460bab01fd0da0e79d0f8fe Mon Sep 17 00:00:00 2001 From: Niels Nes Date: Thu, 2 May 2024 10:18:23 +0200 Subject: [PATCH] Field function needs at least 2 arguments, fixes #7508 --- sql/server/rel_optimize_proj.c | 2 ++ sql/server/rel_select.c | 2 ++ sql/test/BugTracker-2024/Tests/field-arg-error-Bug-7506.test | 5 ++++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/sql/server/rel_optimize_proj.c b/sql/server/rel_optimize_proj.c index 42fd785246..6131dda52f 100644 --- a/sql/server/rel_optimize_proj.c +++ b/sql/server/rel_optimize_proj.c @@ -1781,6 +1781,8 @@ rel_groupby_cse(visitor *v, sql_rel *rel) sql_exp *e1_in_exps = (e1->l && e1->alias.rname == e1->l && e1->alias.name == e1->r) ? exps_bind_column2(rel->exps, e1->l, e1->r, NULL) : exps_bind_column(rel->exps, e1->alias.name, NULL, NULL, 0); + if (!e1_in_exps) + continue; assert(e1_in_exps); /* write e2 as an e1 alias since the expressions are the same */ diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c index c972a99851..934f906cdf 100644 --- a/sql/server/rel_select.c +++ b/sql/server/rel_select.c @@ -3536,6 +3536,8 @@ rel_nop(sql_query *query, sql_rel **rel, symbol *se, int fs, exp_kind ek) if (!sname && strcmp(fname, "field") == 0) { /* map into join */ if (err) return NULL; + if (list_length(exps) < 2) + return sql_error(sql, 02, SQLSTATE(42000) "Field function called with not enough arguments"); sql_exp *le = exps->h->data; set_freevar(le, 1); list_remove_data(exps, NULL, le); diff --git a/sql/test/BugTracker-2024/Tests/field-arg-error-Bug-7506.test b/sql/test/BugTracker-2024/Tests/field-arg-error-Bug-7506.test index e72068cf71..fe6649f434 100644 --- a/sql/test/BugTracker-2024/Tests/field-arg-error-Bug-7506.test +++ b/sql/test/BugTracker-2024/Tests/field-arg-error-Bug-7506.test @@ -1,2 +1,5 @@ -statement error +statement error 42000!SELECT: identifier 'x' unknown SELECT FIELD(x, '', '', '', '', '', '', '', '', '', '', '', '', '') + +statement error 42000!Field function called with not enough arguments +SELECT FIELD('fieldID99999999999999999999999999999999999999999999999999999999999999999999999')