Skip to content

Commit

Permalink
aot compiler: Track non-0x00 tableindex as ref types use (#3695)
Browse files Browse the repository at this point in the history
Any use of a table index that isn't exactly a null byte (`0x00`) means that
the module makes use of the reference types proposal. This is important
to track because `aot_compiler.c` will blindly assume that all table indices
are a single byte long otherwise.

This fixes a crash in WAMR for modules that contain multi-byte encodings
of table indices in `call_indirect` but make no other use of reference types
features.
  • Loading branch information
jkrems authored Aug 16, 2024
1 parent a44c487 commit 59f761b
Showing 1 changed file with 8 additions and 0 deletions.
8 changes: 8 additions & 0 deletions core/iwasm/interpreter/wasm_loader.c
Original file line number Diff line number Diff line change
Expand Up @@ -12004,6 +12004,14 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func,

read_leb_uint32(p, p_end, type_idx);
#if WASM_ENABLE_REF_TYPES != 0 || WASM_ENABLE_GC != 0
#if WASM_ENABLE_WAMR_COMPILER != 0
if (*p != 0x00) {
// Any non-0x00 byte requires the ref types proposal.
// This is different from checking the table_idx value
// since `0x80 0x00` etc. are all valid encodings of zero.
module->is_ref_types_used = true;
}
#endif
read_leb_uint32(p, p_end, table_idx);
#else
CHECK_BUF(p, p_end, 1);
Expand Down

0 comments on commit 59f761b

Please sign in to comment.