bin-runner #36

Merged
zacheryasc merged 103 commits from bin-runner into master 2026-02-13 14:11:40 +00:00
4 changed files with 1266 additions and 226 deletions

1
Cargo.lock generated
View file

@ -2747,6 +2747,7 @@ dependencies = [
name = "swactor-wasm-actor" name = "swactor-wasm-actor"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"proptest",
"swactor", "swactor",
"wasmtime", "wasmtime",
"wat", "wat",

View file

@ -10,3 +10,4 @@ wasmtime = "29"
[dev-dependencies] [dev-dependencies]
swactor = { path = "../..", features = ["getrandom"] } swactor = { path = "../..", features = ["getrandom"] }
wat = "1" wat = "1"
proptest = "1"

View file

@ -41,12 +41,16 @@ impl ActorInterface for WasmActor {
}; };
// 2. Write message bytes into guest memory // 2. Write message bytes into guest memory
self.memory.data_mut(&mut self.store) let mem = self.memory.data_mut(&mut self.store);
[ptr as usize..(ptr as usize + bytes.len())] let end = (ptr as usize).saturating_add(bytes.len());
.copy_from_slice(bytes); if end > mem.len() {
return; // alloc returned OOB pointer — drop message
}
mem[ptr as usize..end].copy_from_slice(bytes);
// 3. Call guest handle // 3. Call guest handle
if self.handle.call(&mut self.store, (ptr, len)).is_err() { if self.handle.call(&mut self.store, (ptr, len)).is_err() {
self.store.data_mut().outbox.clear(); // discard sends from incomplete operation
return; // handle trapped — drop message, keep actor alive return; // handle trapped — drop message, keep actor alive
} }

File diff suppressed because it is too large Load diff