@@ -3492,8 +3492,11 @@ wasm_loader_find_block_addr(WASMExecEnv *exec_env, BlockAddr *block_addr_cache,
34923492 uint32 opcode1 ;
34933493
34943494 read_leb_uint32 (p , p_end , opcode1 );
3495+ /* opcode1 was checked in wasm_loader_prepare_bytecode and
3496+ is no larger than UINT8_MAX */
3497+ opcode = (uint8 )opcode1 ;
34953498
3496- switch (opcode1 ) {
3499+ switch (opcode ) {
34973500 case WASM_OP_I32_TRUNC_SAT_S_F32 :
34983501 case WASM_OP_I32_TRUNC_SAT_U_F32 :
34993502 case WASM_OP_I32_TRUNC_SAT_S_F64 :
@@ -3549,8 +3552,14 @@ wasm_loader_find_block_addr(WASMExecEnv *exec_env, BlockAddr *block_addr_cache,
35493552#if WASM_ENABLE_SHARED_MEMORY != 0
35503553 case WASM_OP_ATOMIC_PREFIX :
35513554 {
3552- /* atomic_op (1 u8) + memarg (2 u32_leb) */
3553- opcode = read_uint8 (p );
3555+ uint32 opcode1 ;
3556+
3557+ /* atomic_op (u32_leb) + memarg (2 u32_leb) */
3558+ read_leb_uint32 (p , p_end , opcode1 );
3559+ /* opcode1 was checked in wasm_loader_prepare_bytecode and
3560+ is no larger than UINT8_MAX */
3561+ opcode = (uint8 )opcode1 ;
3562+
35543563 if (opcode != WASM_OP_ATOMIC_FENCE ) {
35553564 skip_leb_uint32 (p , p_end ); /* align */
35563565 skip_leb_uint32 (p , p_end ); /* offset */
@@ -7464,11 +7473,14 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func,
74647473#if WASM_ENABLE_SHARED_MEMORY != 0
74657474 case WASM_OP_ATOMIC_PREFIX :
74667475 {
7467- opcode = read_uint8 (p );
7476+ uint32 opcode1 ;
7477+
7478+ read_leb_uint32 (p , p_end , opcode1 );
7479+
74687480#if WASM_ENABLE_FAST_INTERP != 0
7469- emit_byte (loader_ctx , opcode );
7481+ emit_byte (loader_ctx , opcode1 );
74707482#endif
7471- if (opcode != WASM_OP_ATOMIC_FENCE ) {
7483+ if (opcode1 != WASM_OP_ATOMIC_FENCE ) {
74727484 CHECK_MEMORY ();
74737485 read_leb_uint32 (p , p_end , align ); /* align */
74747486 read_leb_uint32 (p , p_end , mem_offset ); /* offset */
@@ -7479,7 +7491,7 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func,
74797491#if WASM_ENABLE_JIT != 0 || WASM_ENABLE_WAMR_COMPILER != 0
74807492 func -> has_memory_operations = true;
74817493#endif
7482- switch (opcode ) {
7494+ switch (opcode1 ) {
74837495 case WASM_OP_ATOMIC_NOTIFY :
74847496 POP2_AND_PUSH (VALUE_TYPE_I32 , VALUE_TYPE_I32 );
74857497 break ;
0 commit comments