summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/validator.c7
-rw-r--r--test/parse/module/bad-table-invalid-function.txt10
2 files changed, 17 insertions, 0 deletions
diff --git a/src/validator.c b/src/validator.c
index 79b3316d..fd558f97 100644
--- a/src/validator.c
+++ b/src/validator.c
@@ -929,6 +929,13 @@ static void check_elem_segments(Context* ctx, const WasmModule* module) {
check_table_var(ctx, &elem_segment->table_var, &table)))
continue;
+ size_t i;
+ for (i = 0; i < elem_segment->vars.size; ++i) {
+ if (!WASM_SUCCEEDED(
+ check_func_var(ctx, &elem_segment->vars.data[i], NULL)))
+ continue;
+ }
+
check_const_init_expr(ctx, &field->loc, elem_segment->offset, WASM_TYPE_I32,
"elem segment offset");
}
diff --git a/test/parse/module/bad-table-invalid-function.txt b/test/parse/module/bad-table-invalid-function.txt
new file mode 100644
index 00000000..6269a381
--- /dev/null
+++ b/test/parse/module/bad-table-invalid-function.txt
@@ -0,0 +1,10 @@
+;;; ERROR: 1
+(module
+ (table 1 anyfunc)
+ (func $f)
+ (elem (i32.const 0) $f 1))
+(;; STDERR ;;;
+parse/module/bad-table-invalid-function.txt:5:26: function variable out of range (max 1)
+ (elem (i32.const 0) $f 1))
+ ^
+;;; STDERR ;;)