| (module binary "\00asm\01\00\00\00") |
| (module binary "\00asm" "\01\00\00\00") |
| (module $M1 binary "\00asm\01\00\00\00") |
| (module $M2 binary "\00asm" "\01\00\00\00") |
| |
| (assert_malformed (module binary "") "unexpected end") |
| (assert_malformed (module binary "\01") "unexpected end") |
| (assert_malformed (module binary "\00as") "unexpected end") |
| (assert_malformed (module binary "asm\00") "magic header not detected") |
| (assert_malformed (module binary "msa\00") "magic header not detected") |
| (assert_malformed (module binary "msa\00\01\00\00\00") "magic header not detected") |
| (assert_malformed (module binary "msa\00\00\00\00\01") "magic header not detected") |
| (assert_malformed (module binary "asm\01\00\00\00\00") "magic header not detected") |
| (assert_malformed (module binary "wasm\01\00\00\00") "magic header not detected") |
| (assert_malformed (module binary "\7fasm\01\00\00\00") "magic header not detected") |
| (assert_malformed (module binary "\80asm\01\00\00\00") "magic header not detected") |
| (assert_malformed (module binary "\82asm\01\00\00\00") "magic header not detected") |
| (assert_malformed (module binary "\ffasm\01\00\00\00") "magic header not detected") |
| |
| ;; 8-byte endian-reversed. |
| (assert_malformed (module binary "\00\00\00\01msa\00") "magic header not detected") |
| |
| ;; Middle-endian byte orderings. |
| (assert_malformed (module binary "a\00ms\00\01\00\00") "magic header not detected") |
| (assert_malformed (module binary "sm\00a\00\00\01\00") "magic header not detected") |
| |
| ;; Upper-cased. |
| (assert_malformed (module binary "\00ASM\01\00\00\00") "magic header not detected") |
| |
| ;; EBCDIC-encoded magic. |
| (assert_malformed (module binary "\00\81\a2\94\01\00\00\00") "magic header not detected") |
| |
| ;; Leading UTF-8 BOM. |
| (assert_malformed (module binary "\ef\bb\bf\00asm\01\00\00\00") "magic header not detected") |
| |
| ;; Malformed binary version. |
| (assert_malformed (module binary "\00asm") "unexpected end") |
| (assert_malformed (module binary "\00asm\01") "unexpected end") |
| (assert_malformed (module binary "\00asm\01\00\00") "unexpected end") |
| (assert_malformed (module binary "\00asm\00\00\00\00") "unknown binary version") |
| (assert_malformed (module binary "\00asm\0d\00\00\00") "unknown binary version") |
| (assert_malformed (module binary "\00asm\0e\00\00\00") "unknown binary version") |
| (assert_malformed (module binary "\00asm\00\01\00\00") "unknown binary version") |
| (assert_malformed (module binary "\00asm\00\00\01\00") "unknown binary version") |
| (assert_malformed (module binary "\00asm\00\00\00\01") "unknown binary version") |
| |
| |
| ;; call_indirect reserved byte equal to zero. |
| (assert_malformed |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\01\04\01\60\00\00" ;; Type section |
| "\03\02\01\00" ;; Function section |
| "\04\04\01\70\00\00" ;; Table section |
| "\0a\09\01" ;; Code section |
| |
| ;; function 0 |
| "\07\00" |
| "\41\00" ;; i32.const 0 |
| "\11\00" ;; call_indirect (type 0) |
| "\01" ;; call_indirect reserved byte is not equal to zero! |
| "\0b" ;; end |
| ) |
| "zero flag expected" |
| ) |
| |
| ;; call_indirect reserved byte should not be a "long" LEB128 zero. |
| (assert_malformed |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\01\04\01\60\00\00" ;; Type section |
| "\03\02\01\00" ;; Function section |
| "\04\04\01\70\00\00" ;; Table section |
| "\0a\0a\01" ;; Code section |
| |
| ;; function 0 |
| "\07\00" |
| "\41\00" ;; i32.const 0 |
| "\11\00" ;; call_indirect (type 0) |
| "\80\00" ;; call_indirect reserved byte |
| "\0b" ;; end |
| ) |
| "zero flag expected" |
| ) |
| |
| ;; Same as above for 3, 4, and 5-byte zero encodings. |
| (assert_malformed |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\01\04\01\60\00\00" ;; Type section |
| "\03\02\01\00" ;; Function section |
| "\04\04\01\70\00\00" ;; Table section |
| "\0a\0b\01" ;; Code section |
| |
| ;; function 0 |
| "\08\00" |
| "\41\00" ;; i32.const 0 |
| "\11\00" ;; call_indirect (type 0) |
| "\80\80\00" ;; call_indirect reserved byte |
| "\0b" ;; end |
| ) |
| "zero flag expected" |
| ) |
| |
| (assert_malformed |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\01\04\01\60\00\00" ;; Type section |
| "\03\02\01\00" ;; Function section |
| "\04\04\01\70\00\00" ;; Table section |
| "\0a\0c\01" ;; Code section |
| |
| ;; function 0 |
| "\09\00" |
| "\41\00" ;; i32.const 0 |
| "\11\00" ;; call_indirect (type 0) |
| "\80\80\80\00" ;; call_indirect reserved byte |
| "\0b" ;; end |
| ) |
| "zero flag expected" |
| ) |
| |
| (assert_malformed |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\01\04\01\60\00\00" ;; Type section |
| "\03\02\01\00" ;; Function section |
| "\04\04\01\70\00\00" ;; Table section |
| "\0a\0d\01" ;; Code section |
| |
| ;; function 0 |
| "\0a\00" |
| "\41\00" ;; i32.const 0 |
| "\11\00" ;; call_indirect (type 0) |
| "\80\80\80\80\00" ;; call_indirect reserved byte |
| "\0b" ;; end |
| ) |
| "zero flag expected" |
| ) |
| |
| ;; No more than 2^32 locals. |
| (assert_malformed |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\01\04\01\60\00\00" ;; Type section |
| "\03\02\01\00" ;; Function section |
| "\0a\0c\01" ;; Code section |
| |
| ;; function 0 |
| "\0a\02" |
| "\ff\ff\ff\ff\0f\7f" ;; 0xFFFFFFFF i32 |
| "\02\7e" ;; 0x00000002 i64 |
| "\0b" ;; end |
| ) |
| "too many locals" |
| ) |
| |
| ;; Local count can be 0. |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\01\04\01\60\00\00" ;; Type section |
| "\03\02\01\00" ;; Function section |
| "\0a\0a\01" ;; Code section |
| |
| ;; function 0 |
| "\08\03" |
| "\00\7f" ;; 0 i32 |
| "\00\7e" ;; 0 i64 |
| "\02\7d" ;; 2 f32 |
| "\0b" ;; end |
| ) |
| |
| ;; Function section has non-zero count, but code section is absent. |
| (assert_malformed |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\01\04\01\60\00\00" ;; Type section |
| "\03\03\02\00\00" ;; Function section with 2 functions |
| ) |
| "function and code section have inconsistent lengths" |
| ) |
| |
| ;; Code section has non-zero count, but function section is absent. |
| (assert_malformed |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\0a\04\01\02\00\0b" ;; Code section with 1 empty function |
| ) |
| "function and code section have inconsistent lengths" |
| ) |
| |
| ;; Function section count > code section count |
| (assert_malformed |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\01\04\01\60\00\00" ;; Type section |
| "\03\03\02\00\00" ;; Function section with 2 functions |
| "\0a\04\01\02\00\0b" ;; Code section with 1 empty function |
| ) |
| "function and code section have inconsistent lengths" |
| ) |
| |
| ;; Function section count < code section count |
| (assert_malformed |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\01\04\01\60\00\00" ;; Type section |
| "\03\02\01\00" ;; Function section with 1 function |
| "\0a\07\02\02\00\0b\02\00\0b" ;; Code section with 2 empty functions |
| ) |
| "function and code section have inconsistent lengths" |
| ) |
| |
| ;; Function section has zero count, and code section is absent. |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\03\01\00" ;; Function section with 0 functions |
| ) |
| |
| ;; Code section has zero count, and function section is absent. |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\0a\01\00" ;; Code section with 0 functions |
| ) |
| |
| ;; Type count can be zero |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\01\01\00" ;; type count can be zero |
| ) |
| |
| ;; 2 type declared, 1 given |
| (assert_malformed |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\01\07\02" ;; type section with inconsistent count (2 declared, 1 given) |
| "\60\00\00" ;; 1st type |
| ;; "\60\00\00" ;; 2nd type (missed) |
| ) |
| "unexpected end of section or function" |
| ) |
| |
| ;; 1 type declared, 2 given |
| (assert_malformed |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\01\07\01" ;; type section with inconsistent count (1 declared, 2 given) |
| "\60\00\00" ;; 1st type |
| "\60\00\00" ;; 2nd type (redundant) |
| ) |
| "section size mismatch" |
| ) |
| |
| ;; Import count can be zero |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\01\05\01" ;; type section |
| "\60\01\7f\00" ;; type 0 |
| "\02\01\00" ;; import count can be zero |
| ) |
| |
| ;; 2 import declared, 1 given |
| (assert_malformed |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\01\05\01" ;; type section |
| "\60\01\7f\00" ;; type 0 |
| "\02\16\02" ;; import section with inconsistent count (2 declared, 1 given) |
| ;; 1st import |
| "\08" ;; string length |
| "\73\70\65\63\74\65\73\74" ;; spectest |
| "\09" ;; string length |
| "\70\72\69\6e\74\5f\69\33\32" ;; print_i32 |
| "\00\00" ;; import kind, import signature index |
| ;; 2nd import |
| ;; (missed) |
| ) |
| "unexpected end of section or function" |
| ) |
| |
| ;; 1 import declared, 2 given |
| (assert_malformed |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\01\09\02" ;; type section |
| "\60\01\7f\00" ;; type 0 |
| "\60\01\7d\00" ;; type 1 |
| "\02\2b\01" ;; import section with inconsistent count (1 declared, 2 given) |
| ;; 1st import |
| "\08" ;; string length |
| "\73\70\65\63\74\65\73\74" ;; spectest |
| "\09" ;; string length |
| "\70\72\69\6e\74\5f\69\33\32" ;; print_i32 |
| "\00\00" ;; import kind, import signature index |
| ;; 2nd import |
| ;; (redundant) |
| "\08" ;; string length |
| "\73\70\65\63\74\65\73\74" ;; spectest |
| "\09" ;; string length |
| "\70\72\69\6e\74\5f\66\33\32" ;; print_f32 |
| "\00\01" ;; import kind, import signature index |
| ) |
| "section size mismatch" |
| ) |
| |
| ;; Table count can be zero |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\04\01\00" ;; table count can be zero |
| ) |
| |
| ;; 1 table declared, 0 given |
| (assert_malformed |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\04\01\01" ;; table section with inconsistent count (1 declared, 0 given) |
| ;; "\70\01\00\00" ;; table entity |
| ) |
| "unexpected end of section or function" |
| ) |
| |
| ;; Memory count can be zero |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\05\01\00" ;; memory count can be zero |
| ) |
| |
| ;; 1 memory declared, 0 given |
| (assert_malformed |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\05\01\01" ;; memory section with inconsistent count (1 declared, 0 given) |
| ;; "\00\00" ;; memory 0 (missed) |
| ) |
| "unexpected end of section or function" |
| ) |
| |
| ;; Global count can be zero |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\06\01\00" ;; global count can be zero |
| ) |
| |
| ;; 2 global declared, 1 given |
| (assert_malformed |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\06\06\02" ;; global section with inconsistent count (2 declared, 1 given) |
| "\7f\00\41\00\0b" ;; global 0 |
| ;; "\7f\00\41\00\0b" ;; global 1 (missed) |
| ) |
| "unexpected end of section or function" |
| ) |
| |
| ;; 1 global declared, 2 given |
| (assert_malformed |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\06\0b\01" ;; global section with inconsistent count (1 declared, 2 given) |
| "\7f\00\41\00\0b" ;; global 0 |
| "\7f\00\41\00\0b" ;; global 1 (redundant) |
| ) |
| "section size mismatch" |
| ) |
| |
| ;; Export count can be 0 |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\01\04\01" ;; type section |
| "\60\00\00" ;; type 0 |
| "\03\03\02\00\00" ;; func section |
| "\07\01\00" ;; export count can be zero |
| "\0a\07\02" ;; code section |
| "\02\00\0b" ;; function body 0 |
| "\02\00\0b" ;; function body 1 |
| ) |
| |
| ;; 2 export declared, 1 given |
| (assert_malformed |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\01\04\01" ;; type section |
| "\60\00\00" ;; type 0 |
| "\03\03\02\00\00" ;; func section |
| "\07\06\02" ;; export section with inconsistent count (2 declared, 1 given) |
| "\02" ;; export 0 |
| "\66\31" ;; export name |
| "\00\00" ;; export kind, export func index |
| ;; "\02" ;; export 1 (missed) |
| ;; "\66\32" ;; export name |
| ;; "\00\01" ;; export kind, export func index |
| "\0a\07\02" ;; code section |
| "\02\00\0b" ;; function body 0 |
| "\02\00\0b" ;; function body 1 |
| ) |
| "unexpected end of section or function" |
| ) |
| |
| ;; 1 export declared, 2 given |
| (assert_malformed |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\01\04\01" ;; type section |
| "\60\00\00" ;; type 0 |
| "\03\03\02\00\00" ;; func section |
| "\07\0b\01" ;; export section with inconsistent count (1 declared, 2 given) |
| "\02" ;; export 0 |
| "\66\31" ;; export name |
| "\00\00" ;; export kind, export func index |
| "\02" ;; export 1 (redundant) |
| "\66\32" ;; export name |
| "\00\01" ;; export kind, export func index |
| "\0a\07\02" ;; code section |
| "\02\00\0b" ;; function body 0 |
| "\02\00\0b" ;; function body 1 |
| ) |
| "section size mismatch" |
| ) |
| |
| ;; elem segment count can be zero |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\01\04\01" ;; type section |
| "\60\00\00" ;; type 0 |
| "\03\02\01\00" ;; func section |
| "\04\04\01" ;; table section |
| "\70\00\01" ;; table 0 |
| "\09\01\00" ;; elem segment count can be zero |
| "\0a\04\01" ;; code section |
| "\02\00\0b" ;; function body |
| ) |
| |
| ;; 2 elem segment declared, 1 given |
| (assert_malformed |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\01\04\01" ;; type section |
| "\60\00\00" ;; type 0 |
| "\03\02\01\00" ;; func section |
| "\04\04\01" ;; table section |
| "\70\00\01" ;; table 0 |
| "\09\07\02" ;; elem with inconsistent segment count (2 declared, 1 given) |
| "\00\41\00\0b\01\00" ;; elem 0 |
| ;; "\00\41\00\0b\01\00" ;; elem 1 (missed) |
| "\0a\04\01" ;; code section |
| "\02\00\0b" ;; function body |
| ) |
| "invalid value type" |
| ) |
| |
| ;; 1 elem segment declared, 2 given |
| (assert_malformed |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\01\04\01" ;; type section |
| "\60\00\00" ;; type 0 |
| "\03\02\01\00" ;; func section |
| "\04\04\01" ;; table section |
| "\70\00\01" ;; table 0 |
| "\09\0d\01" ;; elem with inconsistent segment count (1 declared, 2 given) |
| "\00\41\00\0b\01\00" ;; elem 0 |
| "\00\41\00\0b\01\00" ;; elem 1 (redundant) |
| "\0a\04\01" ;; code section |
| "\02\00\0b" ;; function body |
| ) |
| "section size mismatch" |
| ) |
| |
| ;; data segment count can be zero |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\05\03\01" ;; memory section |
| "\00\01" ;; memory 0 |
| "\0b\01\00" ;; data segment count can be zero |
| ) |
| |
| ;; 2 data segment declared, 1 given |
| (assert_malformed |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\05\03\01" ;; memory section |
| "\00\01" ;; memory 0 |
| "\0b\07\02" ;; data with inconsistent segment count (2 declared, 1 given) |
| "\00\41\00\0b\01\61" ;; data 0 |
| ;; "\00\41\01\0b\01\62" ;; data 1 (missed) |
| ) |
| "unexpected end of section or function" |
| ) |
| |
| ;; 1 data segment declared, 2 given |
| (assert_malformed |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\05\03\01" ;; memory section |
| "\00\01" ;; memory 0 |
| "\0b\0d\01" ;; data with inconsistent segment count (1 declared, 2 given) |
| "\00\41\00\0b\01\61" ;; data 0 |
| "\00\41\01\0b\01\62" ;; data 1 (redundant) |
| ) |
| "section size mismatch" |
| ) |
| |
| ;; data segment has 7 bytes declared, but 6 bytes given |
| (assert_malformed |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\05\03\01" ;; memory section |
| "\00\01" ;; memory 0 |
| "\0b\0c\01" ;; data section |
| "\00\41\03\0b" ;; data segment 0 |
| "\07" ;; data segment size with inconsistent lengths (7 declared, 6 given) |
| "\61\62\63\64\65\66" ;; 6 bytes given |
| ) |
| "unexpected end of section or function" |
| ) |
| |
| ;; data segment has 5 bytes declared, but 6 bytes given |
| (assert_malformed |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\05\03\01" ;; memory section |
| "\00\01" ;; memory 0 |
| "\0b\0c\01" ;; data section |
| "\00\41\00\0b" ;; data segment 0 |
| "\05" ;; data segment size with inconsistent lengths (5 declared, 6 given) |
| "\61\62\63\64\65\66" ;; 6 bytes given |
| ) |
| "section size mismatch" |
| ) |
| |
| ;; br_table target count can be zero |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\01\04\01" ;; type section |
| "\60\00\00" ;; type 0 |
| "\03\02\01\00" ;; func section |
| "\0a\11\01" ;; code section |
| "\0f\00" ;; func 0 |
| "\02\40" ;; block 0 |
| "\41\01" ;; condition of if 0 |
| "\04\40" ;; if 0 |
| "\41\01" ;; index of br_table element |
| "\0e\00" ;; br_table target count can be zero |
| "\02" ;; break depth for default |
| "\0b\0b\0b" ;; end |
| ) |
| |
| ;; 2 br_table target declared, 1 given |
| (assert_malformed |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\01\04\01" ;; type section |
| "\60\00\00" ;; type 0 |
| "\03\02\01\00" ;; func section |
| "\0a\12\01" ;; code section |
| "\10\00" ;; func 0 |
| "\02\40" ;; block 0 |
| "\41\01" ;; condition of if 0 |
| "\04\40" ;; if 0 |
| "\41\01" ;; index of br_table element |
| "\0e\02" ;; br_table with inconsistent target count (2 declared, 1 given) |
| "\00" ;; break depth 0 |
| ;; "\01" ;; break depth 1 (missed) |
| "\02" ;; break depth for default |
| "\0b\0b\0b" ;; end |
| ) |
| "unexpected end of section or function" |
| ) |
| |
| ;; 1 br_table target declared, 2 given |
| (assert_malformed |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\01\04\01" ;; type section |
| "\60\00\00" ;; type 0 |
| "\03\02\01\00" ;; func section |
| "\0a\12\01" ;; code section |
| "\11\00" ;; func 0 |
| "\02\40" ;; block 0 |
| "\41\01" ;; condition of if 0 |
| "\04\40" ;; if 0 |
| "\41\01" ;; index of br_table element |
| "\0e\01" ;; br_table with inconsistent target count (1 declared, 2 given) |
| "\00" ;; break depth 0 |
| "\01" ;; break depth 1 |
| "\02" ;; break depth for default |
| "\0b\0b\0b" ;; end |
| ) |
| "invalid value type" |
| ) |
| |
| ;; Start section |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\01\04\01\60\00\00" ;; Type section |
| "\03\02\01\00" ;; Function section |
| "\08\01\00" ;; Start section: function 0 |
| |
| "\0a\04\01" ;; Code section |
| ;; function 0 |
| "\02\00" |
| "\0b" ;; end |
| ) |
| |
| ;; Multiple start sections |
| (assert_malformed |
| (module binary |
| "\00asm" "\01\00\00\00" |
| "\01\04\01\60\00\00" ;; Type section |
| "\03\02\01\00" ;; Function section |
| "\08\01\00" ;; Start section: function 0 |
| "\08\01\00" ;; Start section: function 0 |
| |
| "\0a\04\01" ;; Code section |
| ;; function 0 |
| "\02\00" |
| "\0b" ;; end |
| ) |
| "junk after last section" |
| ) |