diff --git a/core/iwasm/interpreter/wasm_interp_classic.c b/core/iwasm/interpreter/wasm_interp_classic.c index 9ba3a5f4f0..0603a00b41 100644 --- a/core/iwasm/interpreter/wasm_interp_classic.c +++ b/core/iwasm/interpreter/wasm_interp_classic.c @@ -3165,7 +3165,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, if (len > 0) { if ((uint64)start_offset + len - >= wasm_array_obj_length(array_obj)) { + > wasm_array_obj_length(array_obj)) { wasm_set_exception( module, "out of bounds array access"); goto got_exception; diff --git a/core/iwasm/interpreter/wasm_interp_fast.c b/core/iwasm/interpreter/wasm_interp_fast.c index 90bdb8f17d..8e634ecb7f 100644 --- a/core/iwasm/interpreter/wasm_interp_fast.c +++ b/core/iwasm/interpreter/wasm_interp_fast.c @@ -2562,7 +2562,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, if (len > 0) { if ((uint64)start_offset + len - >= wasm_array_obj_length(array_obj)) { + > wasm_array_obj_length(array_obj)) { wasm_set_exception( module, "out of bounds array access"); goto got_exception; diff --git a/tests/wamr-test-suites/spec-test-script/gc_array_fill_cases.patch b/tests/wamr-test-suites/spec-test-script/gc_array_fill_cases.patch new file mode 100644 index 0000000000..e10f207f37 --- /dev/null +++ b/tests/wamr-test-suites/spec-test-script/gc_array_fill_cases.patch @@ -0,0 +1,27 @@ +diff --git a/test/core/gc/array_fill.wast b/test/core/gc/array_fill.wast +index 0379ad53..73122178 100644 +--- a/test/core/gc/array_fill.wast ++++ b/test/core/gc/array_fill.wast +@@ -79,3 +79,22 @@ + (assert_return (invoke "array_get_nth" (i32.const 2)) (i32.const 11)) + (assert_return (invoke "array_get_nth" (i32.const 3)) (i32.const 11)) + (assert_return (invoke "array_get_nth" (i32.const 4)) (i32.const 0)) ++ ++;; fill the whole array ++(assert_return (invoke "array_fill" (i32.const 0) (i32.const 42) (i32.const 12))) ++(assert_return (invoke "array_get_nth" (i32.const 0)) (i32.const 42)) ++(assert_return (invoke "array_get_nth" (i32.const 2)) (i32.const 42)) ++(assert_return (invoke "array_get_nth" (i32.const 5)) (i32.const 42)) ++(assert_return (invoke "array_get_nth" (i32.const 11)) (i32.const 42)) ++ ++;; fill the first element ++(assert_return (invoke "array_fill" (i32.const 0) (i32.const 7) (i32.const 1))) ++(assert_return (invoke "array_get_nth" (i32.const 0)) (i32.const 7)) ++(assert_return (invoke "array_get_nth" (i32.const 1)) (i32.const 42)) ++(assert_return (invoke "array_get_nth" (i32.const 11)) (i32.const 42)) ++ ++;; fill the last 2 elements ++(assert_return (invoke "array_fill" (i32.const 10) (i32.const 9) (i32.const 2))) ++(assert_return (invoke "array_get_nth" (i32.const 9)) (i32.const 42)) ++(assert_return (invoke "array_get_nth" (i32.const 10)) (i32.const 9)) ++(assert_return (invoke "array_get_nth" (i32.const 11)) (i32.const 9)) diff --git a/tests/wamr-test-suites/test_wamr.sh b/tests/wamr-test-suites/test_wamr.sh index 1edf363bcb..8c637cea92 100755 --- a/tests/wamr-test-suites/test_wamr.sh +++ b/tests/wamr-test-suites/test_wamr.sh @@ -478,6 +478,7 @@ function spec_test() # Dec 9, 2024. Merge branch 'funcref' git reset --hard 756060f5816c7e2159f4817fbdee76cf52f9c923 git apply --ignore-whitespace ../../spec-test-script/gc_ignore_cases.patch || exit 1 + git apply --ignore-whitespace ../../spec-test-script/gc_array_fill_cases.patch || exit 1 if [[ ${ENABLE_QEMU} == 1 ]]; then # Decrease the recursive count for tail call cases as nuttx qemu's