From 59f761b58d044dc8adc6bce236e9910e2ee67381 Mon Sep 17 00:00:00 2001 From: Jan Olaf Martin Date: Thu, 15 Aug 2024 21:37:10 -0700 Subject: [PATCH] aot compiler: Track non-0x00 tableindex as ref types use (#3695) 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. --- core/iwasm/interpreter/wasm_loader.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/core/iwasm/interpreter/wasm_loader.c b/core/iwasm/interpreter/wasm_loader.c index 10324ac4..d2bcf717 100644 --- a/core/iwasm/interpreter/wasm_loader.c +++ b/core/iwasm/interpreter/wasm_loader.c @@ -12004,6 +12004,14 @@ re_scan: 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);