@@ -3492,8 +3492,11 @@ wasm_loader_find_block_addr(WASMExecEnv *exec_env, BlockAddr *block_addr_cache,
3492
3492
uint32 opcode1 ;
3493
3493
3494
3494
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 ;
3495
3498
3496
- switch (opcode1 ) {
3499
+ switch (opcode ) {
3497
3500
case WASM_OP_I32_TRUNC_SAT_S_F32 :
3498
3501
case WASM_OP_I32_TRUNC_SAT_U_F32 :
3499
3502
case WASM_OP_I32_TRUNC_SAT_S_F64 :
@@ -3549,8 +3552,14 @@ wasm_loader_find_block_addr(WASMExecEnv *exec_env, BlockAddr *block_addr_cache,
3549
3552
#if WASM_ENABLE_SHARED_MEMORY != 0
3550
3553
case WASM_OP_ATOMIC_PREFIX :
3551
3554
{
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
+
3554
3563
if (opcode != WASM_OP_ATOMIC_FENCE ) {
3555
3564
skip_leb_uint32 (p , p_end ); /* align */
3556
3565
skip_leb_uint32 (p , p_end ); /* offset */
@@ -7464,11 +7473,14 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func,
7464
7473
#if WASM_ENABLE_SHARED_MEMORY != 0
7465
7474
case WASM_OP_ATOMIC_PREFIX :
7466
7475
{
7467
- opcode = read_uint8 (p );
7476
+ uint32 opcode1 ;
7477
+
7478
+ read_leb_uint32 (p , p_end , opcode1 );
7479
+
7468
7480
#if WASM_ENABLE_FAST_INTERP != 0
7469
- emit_byte (loader_ctx , opcode );
7481
+ emit_byte (loader_ctx , opcode1 );
7470
7482
#endif
7471
- if (opcode != WASM_OP_ATOMIC_FENCE ) {
7483
+ if (opcode1 != WASM_OP_ATOMIC_FENCE ) {
7472
7484
CHECK_MEMORY ();
7473
7485
read_leb_uint32 (p , p_end , align ); /* align */
7474
7486
read_leb_uint32 (p , p_end , mem_offset ); /* offset */
@@ -7479,7 +7491,7 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func,
7479
7491
#if WASM_ENABLE_JIT != 0 || WASM_ENABLE_WAMR_COMPILER != 0
7480
7492
func -> has_memory_operations = true;
7481
7493
#endif
7482
- switch (opcode ) {
7494
+ switch (opcode1 ) {
7483
7495
case WASM_OP_ATOMIC_NOTIFY :
7484
7496
POP2_AND_PUSH (VALUE_TYPE_I32 , VALUE_TYPE_I32 );
7485
7497
break ;
0 commit comments