mirror of
https://github.com/fluencelabs/wasmer
synced 2024-12-14 14:45:40 +00:00
74875ed554
* Move wasmer-runtime to wasmer-runtime-core * Add the runtime library * Fix issue with macros using wasmer_runtime, fmt * Make default compiler dependency optional * Add instantiate and validate functions
591 lines
20 KiB
Plaintext
591 lines
20 KiB
Plaintext
(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")
|
|
|
|
(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")
|
|
|
|
;; Unsigned LEB128 can have non-minimal length
|
|
(module binary
|
|
"\00asm" "\01\00\00\00"
|
|
"\05\04\01" ;; Memory section with 1 entry
|
|
"\00\82\00" ;; no max, minimum 2
|
|
)
|
|
(module binary
|
|
"\00asm" "\01\00\00\00"
|
|
"\05\07\01" ;; Memory section with 1 entry
|
|
"\00\82\80\80\80\00" ;; no max, minimum 2
|
|
)
|
|
|
|
;; Signed LEB128 can have non-minimal length
|
|
(module binary
|
|
"\00asm" "\01\00\00\00"
|
|
"\06\07\01" ;; Global section with 1 entry
|
|
"\7f\00" ;; i32, immutable
|
|
"\41\80\00" ;; i32.const 0
|
|
"\0b" ;; end
|
|
)
|
|
(module binary
|
|
"\00asm" "\01\00\00\00"
|
|
"\06\07\01" ;; Global section with 1 entry
|
|
"\7f\00" ;; i32, immutable
|
|
"\41\ff\7f" ;; i32.const -1
|
|
"\0b" ;; end
|
|
)
|
|
(module binary
|
|
"\00asm" "\01\00\00\00"
|
|
"\06\0a\01" ;; Global section with 1 entry
|
|
"\7f\00" ;; i32, immutable
|
|
"\41\80\80\80\80\00" ;; i32.const 0
|
|
"\0b" ;; end
|
|
)
|
|
(module binary
|
|
"\00asm" "\01\00\00\00"
|
|
"\06\0a\01" ;; Global section with 1 entry
|
|
"\7f\00" ;; i32, immutable
|
|
"\41\ff\ff\ff\ff\7f" ;; i32.const -1
|
|
"\0b" ;; end
|
|
)
|
|
|
|
(module binary
|
|
"\00asm" "\01\00\00\00"
|
|
"\06\07\01" ;; Global section with 1 entry
|
|
"\7e\00" ;; i64, immutable
|
|
"\42\80\00" ;; i64.const 0 with unused bits set
|
|
"\0b" ;; end
|
|
)
|
|
(module binary
|
|
"\00asm" "\01\00\00\00"
|
|
"\06\07\01" ;; Global section with 1 entry
|
|
"\7e\00" ;; i64, immutable
|
|
"\42\ff\7f" ;; i64.const -1 with unused bits unset
|
|
"\0b" ;; end
|
|
)
|
|
(module binary
|
|
"\00asm" "\01\00\00\00"
|
|
"\06\0f\01" ;; Global section with 1 entry
|
|
"\7e\00" ;; i64, immutable
|
|
"\42\80\80\80\80\80\80\80\80\80\00" ;; i64.const 0 with unused bits set
|
|
"\0b" ;; end
|
|
)
|
|
(module binary
|
|
"\00asm" "\01\00\00\00"
|
|
"\06\0f\01" ;; Global section with 1 entry
|
|
"\7e\00" ;; i64, immutable
|
|
"\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\7f" ;; i64.const -1 with unused bits unset
|
|
"\0b" ;; end
|
|
)
|
|
|
|
;; Data segment memory index can have non-minimal length
|
|
(module binary
|
|
"\00asm" "\01\00\00\00"
|
|
"\05\03\01" ;; Memory section with 1 entry
|
|
"\00\00" ;; no max, minimum 0
|
|
"\0b\07\01" ;; Data section with 1 entry
|
|
"\80\00" ;; Memory index 0, encoded with 2 bytes
|
|
"\41\00\0b\00" ;; (i32.const 0) with contents ""
|
|
)
|
|
|
|
;; Element segment table index can have non-minimal length
|
|
(module binary
|
|
"\00asm" "\01\00\00\00"
|
|
"\04\04\01" ;; Table section with 1 entry
|
|
"\70\00\00" ;; no max, minimum 0, anyfunc
|
|
"\09\07\01" ;; Element section with 1 entry
|
|
"\80\00" ;; Table index 0, encoded with 2 bytes
|
|
"\41\00\0b\00" ;; (i32.const 0) with no elements
|
|
)
|
|
|
|
;; Unsigned LEB128 must not be overlong
|
|
(assert_malformed
|
|
(module binary
|
|
"\00asm" "\01\00\00\00"
|
|
"\05\08\01" ;; Memory section with 1 entry
|
|
"\00\82\80\80\80\80\00" ;; no max, minimum 2 with one byte too many
|
|
)
|
|
"integer representation too long"
|
|
)
|
|
|
|
;; Signed LEB128 must not be overlong
|
|
(assert_malformed
|
|
(module binary
|
|
"\00asm" "\01\00\00\00"
|
|
"\06\0b\01" ;; Global section with 1 entry
|
|
"\7f\00" ;; i32, immutable
|
|
"\41\80\80\80\80\80\00" ;; i32.const 0 with one byte too many
|
|
"\0b" ;; end
|
|
)
|
|
"integer representation too long"
|
|
)
|
|
(assert_malformed
|
|
(module binary
|
|
"\00asm" "\01\00\00\00"
|
|
"\06\0b\01" ;; Global section with 1 entry
|
|
"\7f\00" ;; i32, immutable
|
|
"\41\ff\ff\ff\ff\ff\7f" ;; i32.const -1 with one byte too many
|
|
"\0b" ;; end
|
|
)
|
|
"integer representation too long"
|
|
)
|
|
|
|
(assert_malformed
|
|
(module binary
|
|
"\00asm" "\01\00\00\00"
|
|
"\06\10\01" ;; Global section with 1 entry
|
|
"\7e\00" ;; i64, immutable
|
|
"\42\80\80\80\80\80\80\80\80\80\80\00" ;; i64.const 0 with one byte too many
|
|
"\0b" ;; end
|
|
)
|
|
"integer representation too long"
|
|
)
|
|
(assert_malformed
|
|
(module binary
|
|
"\00asm" "\01\00\00\00"
|
|
"\06\10\01" ;; Global section with 1 entry
|
|
"\7e\00" ;; i64, immutable
|
|
"\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\7f" ;; i64.const -1 with one byte too many
|
|
"\0b" ;; end
|
|
)
|
|
"integer representation too long"
|
|
)
|
|
|
|
;; Unsigned LEB128s zero-extend
|
|
(assert_malformed
|
|
(module binary
|
|
"\00asm" "\01\00\00\00"
|
|
"\05\07\01" ;; Memory section with 1 entry
|
|
"\00\82\80\80\80\70" ;; no max, minimum 2 with unused bits set
|
|
)
|
|
"integer too large"
|
|
)
|
|
(assert_malformed
|
|
(module binary
|
|
"\00asm" "\01\00\00\00"
|
|
"\05\07\01" ;; Memory section with 1 entry
|
|
"\00\82\80\80\80\40" ;; no max, minimum 2 with some unused bits set
|
|
)
|
|
"integer too large"
|
|
)
|
|
|
|
;; Signed LEB128s sign-extend
|
|
(assert_malformed
|
|
(module binary
|
|
"\00asm" "\01\00\00\00"
|
|
"\06\0a\01" ;; Global section with 1 entry
|
|
"\7f\00" ;; i32, immutable
|
|
"\41\80\80\80\80\70" ;; i32.const 0 with unused bits set
|
|
"\0b" ;; end
|
|
)
|
|
"integer too large"
|
|
)
|
|
(assert_malformed
|
|
(module binary
|
|
"\00asm" "\01\00\00\00"
|
|
"\06\0a\01" ;; Global section with 1 entry
|
|
"\7f\00" ;; i32, immutable
|
|
"\41\ff\ff\ff\ff\0f" ;; i32.const -1 with unused bits unset
|
|
"\0b" ;; end
|
|
)
|
|
"integer too large"
|
|
)
|
|
(assert_malformed
|
|
(module binary
|
|
"\00asm" "\01\00\00\00"
|
|
"\06\0a\01" ;; Global section with 1 entry
|
|
"\7f\00" ;; i32, immutable
|
|
"\41\80\80\80\80\1f" ;; i32.const 0 with some unused bits set
|
|
"\0b" ;; end
|
|
)
|
|
"integer too large"
|
|
)
|
|
(assert_malformed
|
|
(module binary
|
|
"\00asm" "\01\00\00\00"
|
|
"\06\0a\01" ;; Global section with 1 entry
|
|
"\7f\00" ;; i32, immutable
|
|
"\41\ff\ff\ff\ff\4f" ;; i32.const -1 with some unused bits unset
|
|
"\0b" ;; end
|
|
)
|
|
"integer too large"
|
|
)
|
|
|
|
(assert_malformed
|
|
(module binary
|
|
"\00asm" "\01\00\00\00"
|
|
"\06\0f\01" ;; Global section with 1 entry
|
|
"\7e\00" ;; i64, immutable
|
|
"\42\80\80\80\80\80\80\80\80\80\7e" ;; i64.const 0 with unused bits set
|
|
"\0b" ;; end
|
|
)
|
|
"integer too large"
|
|
)
|
|
(assert_malformed
|
|
(module binary
|
|
"\00asm" "\01\00\00\00"
|
|
"\06\0f\01" ;; Global section with 1 entry
|
|
"\7e\00" ;; i64, immutable
|
|
"\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\01" ;; i64.const -1 with unused bits unset
|
|
"\0b" ;; end
|
|
)
|
|
"integer too large"
|
|
)
|
|
(assert_malformed
|
|
(module binary
|
|
"\00asm" "\01\00\00\00"
|
|
"\06\0f\01" ;; Global section with 1 entry
|
|
"\7e\00" ;; i64, immutable
|
|
"\42\80\80\80\80\80\80\80\80\80\02" ;; i64.const 0 with some unused bits set
|
|
"\0b" ;; end
|
|
)
|
|
"integer too large"
|
|
)
|
|
(assert_malformed
|
|
(module binary
|
|
"\00asm" "\01\00\00\00"
|
|
"\06\0f\01" ;; Global section with 1 entry
|
|
"\7e\00" ;; i64, immutable
|
|
"\42\ff\ff\ff\ff\ff\ff\ff\ff\ff\41" ;; i64.const -1 with some unused bits unset
|
|
"\0b" ;; end
|
|
)
|
|
"integer too large"
|
|
)
|
|
|
|
;; 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"
|
|
)
|
|
|
|
;; memory.grow 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
|
|
"\05\03\01\00\00" ;; Memory section
|
|
"\0a\09\01" ;; Code section
|
|
|
|
;; function 0
|
|
"\07\00"
|
|
"\41\00" ;; i32.const 0
|
|
"\40" ;; memory.grow
|
|
"\01" ;; memory.grow reserved byte is not equal to zero!
|
|
"\1a" ;; drop
|
|
"\0b" ;; end
|
|
)
|
|
"zero flag expected"
|
|
)
|
|
|
|
;; memory.grow 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
|
|
"\05\03\01\00\00" ;; Memory section
|
|
"\0a\0a\01" ;; Code section
|
|
|
|
;; function 0
|
|
"\08\00"
|
|
"\41\00" ;; i32.const 0
|
|
"\40" ;; memory.grow
|
|
"\80\00" ;; memory.grow reserved byte
|
|
"\1a" ;; drop
|
|
"\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
|
|
"\05\03\01\00\00" ;; Memory section
|
|
"\0a\0b\01" ;; Code section
|
|
|
|
;; function 0
|
|
"\09\00"
|
|
"\41\00" ;; i32.const 0
|
|
"\40" ;; memory.grow
|
|
"\80\80\00" ;; memory.grow reserved byte
|
|
"\1a" ;; drop
|
|
"\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
|
|
"\05\03\01\00\00" ;; Memory section
|
|
"\0a\0c\01" ;; Code section
|
|
|
|
;; function 0
|
|
"\0a\00"
|
|
"\41\00" ;; i32.const 0
|
|
"\40" ;; memory.grow
|
|
"\80\80\80\00" ;; memory.grow reserved byte
|
|
"\1a" ;; drop
|
|
"\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
|
|
"\05\03\01\00\00" ;; Memory section
|
|
"\0a\0d\01" ;; Code section
|
|
|
|
;; function 0
|
|
"\0b\00"
|
|
"\41\00" ;; i32.const 0
|
|
"\40" ;; memory.grow
|
|
"\80\80\80\80\00" ;; memory.grow reserved byte
|
|
"\1a" ;; drop
|
|
"\0b" ;; end
|
|
)
|
|
"zero flag expected"
|
|
)
|
|
|
|
;; memory.size 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
|
|
"\05\03\01\00\00" ;; Memory section
|
|
"\0a\07\01" ;; Code section
|
|
|
|
;; function 0
|
|
"\05\00"
|
|
"\3f" ;; memory.size
|
|
"\01" ;; memory.size reserved byte is not equal to zero!
|
|
"\1a" ;; drop
|
|
"\0b" ;; end
|
|
)
|
|
"zero flag expected"
|
|
)
|
|
|
|
;; memory.size 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
|
|
"\05\03\01\00\00" ;; Memory section
|
|
"\0a\08\01" ;; Code section
|
|
|
|
;; function 0
|
|
"\06\00"
|
|
"\3f" ;; memory.size
|
|
"\80\00" ;; memory.size reserved byte
|
|
"\1a" ;; drop
|
|
"\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
|
|
"\05\03\01\00\00" ;; Memory section
|
|
"\0a\09\01" ;; Code section
|
|
|
|
;; function 0
|
|
"\07\00"
|
|
"\3f" ;; memory.size
|
|
"\80\80\00" ;; memory.size reserved byte
|
|
"\1a" ;; drop
|
|
"\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
|
|
"\05\03\01\00\00" ;; Memory section
|
|
"\0a\0a\01" ;; Code section
|
|
|
|
;; function 0
|
|
"\08\00"
|
|
"\3f" ;; memory.size
|
|
"\80\80\80\00" ;; memory.size reserved byte
|
|
"\1a" ;; drop
|
|
"\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
|
|
"\05\03\01\00\00" ;; Memory section
|
|
"\0a\0b\01" ;; Code section
|
|
|
|
;; function 0
|
|
"\09\00"
|
|
"\3f" ;; memory.size
|
|
"\80\80\80\80\00" ;; memory.size reserved byte
|
|
"\1a" ;; drop
|
|
"\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"
|
|
)
|