From 830972936cd52262b18cf26cfdbb3cf06b41cef8 Mon Sep 17 00:00:00 2001 From: Ng Zhi An Date: Wed, 27 Oct 2021 10:53:10 -0700 Subject: [PATCH 1/2] Check all types of partially-oob stores Follow-up to #1384 to add checks for all numeric type. Fixes #1250. --- test/core/memory_trap.wast | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/test/core/memory_trap.wast b/test/core/memory_trap.wast index 91990c6fa8..0f7529145d 100644 --- a/test/core/memory_trap.wast +++ b/test/core/memory_trap.wast @@ -21,8 +21,6 @@ (assert_return (invoke "store" (i32.const -4) (i32.const 42))) (assert_return (invoke "load" (i32.const -4)) (i32.const 42)) (assert_trap (invoke "store" (i32.const -3) (i32.const 0x12345678)) "out of bounds memory access") -;; check that the oob store above does not store partial data. -(assert_return (invoke "load" (i32.const -4)) (i32.const 42)) (assert_trap (invoke "load" (i32.const -3)) "out of bounds memory access") (assert_trap (invoke "store" (i32.const -2) (i32.const 13)) "out of bounds memory access") (assert_trap (invoke "load" (i32.const -2)) "out of bounds memory access") @@ -270,3 +268,15 @@ ;; No memory was changed (assert_return (invoke "i64.load" (i32.const 0xfff8)) (i64.const 0x6867666564636261)) (assert_return (invoke "i64.load" (i32.const 0)) (i64.const 0x6867666564636261)) + +;; Check that out of bounds store do not store partial data. +;; Zero last 8 bytes. +(assert_return (invoke "i64.store" (i32.const 0xfff8) (i64.const 0))) +(assert_trap (invoke "i32.store" (i32.const 0xfffd) (i32.const 0x12345678)) "out of bounds memory access") +(assert_return (invoke "i32.load" (i32.const 0xfffc)) (i32.const 0)) +(assert_trap (invoke "i64.store" (i32.const 0xfff9) (i64.const 0x12345678)) "out of bounds memory access") +(assert_return (invoke "i64.load" (i32.const 0xfff8)) (i64.const 0)) +(assert_trap (invoke "f32.store" (i32.const 0xfffd) (f32.const 0x12345678)) "out of bounds memory access") +(assert_return (invoke "f32.load" (i32.const 0xfffc)) (f32.const 0)) +(assert_trap (invoke "f64.store" (i32.const 0xfff9) (f64.const 0x12345678)) "out of bounds memory access") +(assert_return (invoke "f64.load" (i32.const 0xfff8)) (f64.const 0)) From e531b1ab3e72c849ee346f33cc4bbf44128f7c60 Mon Sep 17 00:00:00 2001 From: Ng Zhi An Date: Wed, 27 Oct 2021 10:56:21 -0700 Subject: [PATCH 2/2] Use 64-bit constants for 64-bit instructions --- test/core/memory_trap.wast | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/core/memory_trap.wast b/test/core/memory_trap.wast index 0f7529145d..5ce8f5c31a 100644 --- a/test/core/memory_trap.wast +++ b/test/core/memory_trap.wast @@ -274,9 +274,9 @@ (assert_return (invoke "i64.store" (i32.const 0xfff8) (i64.const 0))) (assert_trap (invoke "i32.store" (i32.const 0xfffd) (i32.const 0x12345678)) "out of bounds memory access") (assert_return (invoke "i32.load" (i32.const 0xfffc)) (i32.const 0)) -(assert_trap (invoke "i64.store" (i32.const 0xfff9) (i64.const 0x12345678)) "out of bounds memory access") +(assert_trap (invoke "i64.store" (i32.const 0xfff9) (i64.const 0x1234567890abcdef)) "out of bounds memory access") (assert_return (invoke "i64.load" (i32.const 0xfff8)) (i64.const 0)) (assert_trap (invoke "f32.store" (i32.const 0xfffd) (f32.const 0x12345678)) "out of bounds memory access") (assert_return (invoke "f32.load" (i32.const 0xfffc)) (f32.const 0)) -(assert_trap (invoke "f64.store" (i32.const 0xfff9) (f64.const 0x12345678)) "out of bounds memory access") +(assert_trap (invoke "f64.store" (i32.const 0xfff9) (f64.const 0x1234567890abcdef)) "out of bounds memory access") (assert_return (invoke "f64.load" (i32.const 0xfff8)) (f64.const 0))