MCPcopy Create free account
hub / github.com/PLSysSec/wave / wasi_sock_send

Function wasi_sock_send

src/wrappers.rs:1062–1091  ·  view source on GitHub ↗
(
    ctx: &mut VmCtx,
    v_fd: u32,
    si_data: u32,
    si_data_count: u32,
    si_flags: u32,
)

Source from the content-addressed store, hash-verified

1060#[ensures(ctx_safe(ctx))]
1061#[ensures(trace_safe(trace, ctx))]
1062pub fn wasi_sock_send(
1063 ctx: &mut VmCtx,
1064 v_fd: u32,
1065 si_data: u32,
1066 si_data_count: u32,
1067 si_flags: u32,
1068) -> RuntimeResult<u32> {
1069 let fd = ctx.fdmap.fd_to_native(v_fd)?;
1070
1071 let mut num: u32 = 0;
1072 let mut i = 0;
1073 while i < si_data_count {
1074 body_invariant!(ctx_safe(ctx));
1075 body_invariant!(trace_safe(trace, ctx));
1076
1077 let start = (si_data + i * 8) as usize;
1078
1079 let (ptr, len) = ctx.read_u32_pair(start)?;
1080 if !ctx.fits_in_lin_mem(ptr, len) {
1081 return Err(Efault);
1082 }
1083 // Currently the flags field of trace_send must be set to 0:
1084 // https://github.com/WebAssembly/WASI/blob/main/phases/snapshot/docs.md/#siflags
1085 let flags = 0;
1086 let result = trace_send(ctx, fd, ptr, len as usize, flags)?;
1087 num += result as u32;
1088 i += 1;
1089 }
1090 Ok(num)
1091}
1092
1093// https://github.com/WebAssembly/WASI/blob/main/phases/snapshot/docs.md#sock_shutdown
1094// ensures: valid(v_fd) => trace = old(shutdown :: trace)

Calls 4

trace_sendFunction · 0.85
fd_to_nativeMethod · 0.80
read_u32_pairMethod · 0.80
fits_in_lin_memMethod · 0.80

Tested by

no test coverage detected