diff options
-rw-r--r-- | src/validator.c | 7 | ||||
-rw-r--r-- | test/parse/module/bad-table-invalid-function.txt | 10 |
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 ;;) |