|
|
@@ -3492,8 +3492,11 @@ wasm_loader_find_block_addr(WASMExecEnv *exec_env, BlockAddr *block_addr_cache,
|
|
|
uint32 opcode1;
|
|
|
|
|
|
read_leb_uint32(p, p_end, opcode1);
|
|
|
+ /* opcode1 was checked in wasm_loader_prepare_bytecode and
|
|
|
+ is no larger than UINT8_MAX */
|
|
|
+ opcode = (uint8)opcode1;
|
|
|
|
|
|
- switch (opcode1) {
|
|
|
+ switch (opcode) {
|
|
|
case WASM_OP_I32_TRUNC_SAT_S_F32:
|
|
|
case WASM_OP_I32_TRUNC_SAT_U_F32:
|
|
|
case WASM_OP_I32_TRUNC_SAT_S_F64:
|
|
|
@@ -3549,8 +3552,14 @@ wasm_loader_find_block_addr(WASMExecEnv *exec_env, BlockAddr *block_addr_cache,
|
|
|
#if WASM_ENABLE_SHARED_MEMORY != 0
|
|
|
case WASM_OP_ATOMIC_PREFIX:
|
|
|
{
|
|
|
- /* atomic_op (1 u8) + memarg (2 u32_leb) */
|
|
|
- opcode = read_uint8(p);
|
|
|
+ uint32 opcode1;
|
|
|
+
|
|
|
+ /* atomic_op (u32_leb) + memarg (2 u32_leb) */
|
|
|
+ read_leb_uint32(p, p_end, opcode1);
|
|
|
+ /* opcode1 was checked in wasm_loader_prepare_bytecode and
|
|
|
+ is no larger than UINT8_MAX */
|
|
|
+ opcode = (uint8)opcode1;
|
|
|
+
|
|
|
if (opcode != WASM_OP_ATOMIC_FENCE) {
|
|
|
skip_leb_uint32(p, p_end); /* align */
|
|
|
skip_leb_uint32(p, p_end); /* offset */
|
|
|
@@ -7464,11 +7473,14 @@ re_scan:
|
|
|
#if WASM_ENABLE_SHARED_MEMORY != 0
|
|
|
case WASM_OP_ATOMIC_PREFIX:
|
|
|
{
|
|
|
- opcode = read_uint8(p);
|
|
|
+ uint32 opcode1;
|
|
|
+
|
|
|
+ read_leb_uint32(p, p_end, opcode1);
|
|
|
+
|
|
|
#if WASM_ENABLE_FAST_INTERP != 0
|
|
|
- emit_byte(loader_ctx, opcode);
|
|
|
+ emit_byte(loader_ctx, opcode1);
|
|
|
#endif
|
|
|
- if (opcode != WASM_OP_ATOMIC_FENCE) {
|
|
|
+ if (opcode1 != WASM_OP_ATOMIC_FENCE) {
|
|
|
CHECK_MEMORY();
|
|
|
read_leb_uint32(p, p_end, align); /* align */
|
|
|
read_leb_uint32(p, p_end, mem_offset); /* offset */
|
|
|
@@ -7479,7 +7491,7 @@ re_scan:
|
|
|
#if WASM_ENABLE_JIT != 0 || WASM_ENABLE_WAMR_COMPILER != 0
|
|
|
func->has_memory_operations = true;
|
|
|
#endif
|
|
|
- switch (opcode) {
|
|
|
+ switch (opcode1) {
|
|
|
case WASM_OP_ATOMIC_NOTIFY:
|
|
|
POP2_AND_PUSH(VALUE_TYPE_I32, VALUE_TYPE_I32);
|
|
|
break;
|