;;! multi_memory = true ;;! hogs_memory = true ;; Sending a massive string (component definition $A (component $A (core module $m (memory (export "m") 1) (func (export "f") (param i32 i32) unreachable) (func (export "realloc") (param i32 i32 i32 i32) (result i32) unreachable) ) (core instance $i (instantiate $m)) (func (export "f") (param "x" string) (canon lift (core func $i "f") (memory $i "m") (realloc (func $i "realloc")) ) ) ) (instance $a (instantiate $A)) (component $B (import "f" (func $f (param "x" string))) (core module $libc (memory (export "mem") 1)) (core instance $libc (instantiate $libc)) (core func $f (canon lower (func $f) (memory $libc "mem"))) (core module $m (import "" "f" (func $f (param i32 i32))) (import "" "mem" (memory 1)) (func (export "run") (param i32) (call $f (i32.const 0) (local.get 0))) (func (export "grow") (param i32) (result i32) (memory.grow (local.get 0))) ) (core instance $i (instantiate $m (with "" (instance (export "f" (func $f)) (export "mem" (memory $libc "mem")) )) )) (func (export "run") (param "x" u32) (canon lift (core func $i "run"))) (func (export "grow") (param "x" u32) (result s32) (canon lift (core func $i "grow"))) ) (instance $b (instantiate $B (with "f" (func $a "f")))) (export "run" (func $b "run")) (export "grow" (func $b "grow")) ) ;; Wildly out of bounds is just rejected (component instance $A $A) (assert_trap (invoke "run" (u32.const 0x8000_0000)) "string content out-of-bounds") ;; In-bounds, and just under the limit. Should hit the `unreachable` in the ;; `realloc`. (component instance $A $A) (assert_return (invoke "grow" (u32.const 65530)) (s32.const 1)) (assert_trap (invoke "run" (u32.const 0x7fff_ffff)) "unreachable") ;; Size exceeds `(1<<31)-1` (component instance $A $A) (assert_return (invoke "grow" (u32.const 65530)) (s32.const 1)) (assert_trap (invoke "run" (u32.const 0x8000_0000)) "string content out-of-bounds")