aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/fixtures/spec_testsuites/core/align.wast
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2024-07-11 20:02:34 +0900
committernsfisis <nsfisis@gmail.com>2024-07-11 20:02:34 +0900
commitd1c268b76f65e69ea708096d5023c4d731cff594 (patch)
treee48836287272388df613a370fda7a46598c517f8 /tests/fixtures/spec_testsuites/core/align.wast
parente4324d3d1d3bf3568d4e2f3b80c9cc324d324f83 (diff)
downloadphp-waddiwasi-d1c268b76f65e69ea708096d5023c4d731cff594.tar.gz
php-waddiwasi-d1c268b76f65e69ea708096d5023c4d731cff594.tar.zst
php-waddiwasi-d1c268b76f65e69ea708096d5023c4d731cff594.zip
fix: various spectests
Diffstat (limited to 'tests/fixtures/spec_testsuites/core/align.wast')
-rw-r--r--tests/fixtures/spec_testsuites/core/align.wast117
1 files changed, 117 insertions, 0 deletions
diff --git a/tests/fixtures/spec_testsuites/core/align.wast b/tests/fixtures/spec_testsuites/core/align.wast
index 9306464..7753df8 100644
--- a/tests/fixtures/spec_testsuites/core/align.wast
+++ b/tests/fixtures/spec_testsuites/core/align.wast
@@ -864,3 +864,120 @@
(assert_trap (invoke "store" (i32.const 65532) (i64.const -1)) "out of bounds memory access")
;; No memory was changed
(assert_return (invoke "load" (i32.const 65532)) (i32.const 0))
+
+;; Test invalid alignment values that may cause overflow when parsed.
+;; These use the binary format, because it stores alignment as a base-2 exponent.
+
+;; Signed 32-bit overflow
+(assert_invalid
+ (module binary
+ "\00asm" "\01\00\00\00"
+ "\01\04\01\60\00\00" ;; Type section: 1 type
+ "\03\02\01\00" ;; Function section: 1 function
+ "\05\03\01\00\01" ;; Memory section: 1 memory
+ "\0a\0a\01" ;; Code section: 1 function
+
+ ;; function 0
+ "\08\00"
+ "\41\00" ;; i32.const 0
+ "\28\1f\00" ;; i32.load offset=0 align=2**31
+ "\1a" ;; drop
+ "\0b" ;; end
+ )
+ "alignment must not be larger than natural"
+)
+
+;; Unsigned 32-bit overflow
+(assert_malformed
+ (module binary
+ "\00asm" "\01\00\00\00"
+ "\01\04\01\60\00\00" ;; Type section: 1 type
+ "\03\02\01\00" ;; Function section: 1 function
+ "\05\03\01\00\01" ;; Memory section: 1 memory
+ "\0a\0a\01" ;; Code section: 1 function
+
+ ;; function 0
+ "\08\00"
+ "\41\00" ;; i32.const 0
+ "\28\20\00" ;; i32.load offset=0 align=2**32
+ "\1a" ;; drop
+ "\0b" ;; end
+ )
+ "malformed memop flags"
+)
+
+;; 32-bit out of range
+(assert_malformed
+ (module binary
+ "\00asm" "\01\00\00\00"
+ "\01\04\01\60\00\00" ;; Type section: 1 type
+ "\03\02\01\00" ;; Function section: 1 function
+ "\05\03\01\00\01" ;; Memory section: 1 memory
+ "\0a\0a\01" ;; Code section: 1 function
+
+ ;; function 0
+ "\08\00"
+ "\41\00" ;; i32.const 0
+ "\28\21\00" ;; i32.load offset=0 align=2**33
+ "\1a" ;; drop
+ "\0b" ;; end
+ )
+ "malformed memop flags"
+)
+
+;; Signed 64-bit overflow
+(assert_malformed
+ (module binary
+ "\00asm" "\01\00\00\00"
+ "\01\04\01\60\00\00" ;; Type section: 1 type
+ "\03\02\01\00" ;; Function section: 1 function
+ "\05\03\01\00\01" ;; Memory section: 1 memory
+ "\0a\0a\01" ;; Code section: 1 function
+
+ ;; function 0
+ "\08\00"
+ "\41\00" ;; i32.const 0
+ "\28\3f\00" ;; i32.load offset=0 align=2**63
+ "\1a" ;; drop
+ "\0b" ;; end
+ )
+ "malformed memop flags"
+)
+
+;; Unsigned 64-bit overflow
+(assert_malformed
+ (module binary
+ "\00asm" "\01\00\00\00"
+ "\01\04\01\60\00\00" ;; Type section: 1 type
+ "\03\02\01\00" ;; Function section: 1 function
+ "\05\03\01\00\01" ;; Memory section: 1 memory
+ "\0a\0a\01" ;; Code section: 1 function
+
+ ;; function 0
+ "\08\00"
+ "\41\00" ;; i32.const 0
+ "\28\40\00" ;; i32.load offset=0 align=2**64
+ "\1a" ;; drop
+ "\0b" ;; end
+ )
+ "malformed memop flags"
+)
+
+;; 64-bit out of range
+(assert_malformed
+ (module binary
+ "\00asm" "\01\00\00\00"
+ "\01\04\01\60\00\00" ;; Type section: 1 type
+ "\03\02\01\00" ;; Function section: 1 function
+ "\05\03\01\00\01" ;; Memory section: 1 memory
+ "\0a\0a\01" ;; Code section: 1 function
+
+ ;; function 0
+ "\08\00"
+ "\41\00" ;; i32.const 0
+ "\28\41\00" ;; i32.load offset=0 align=2**65
+ "\1a" ;; drop
+ "\0b" ;; end
+ )
+ "malformed memop flags"
+)