MCPcopy Create free account
hub / github.com/bytecodealliance/wasmtime / read_write_memory_via_api

Function read_write_memory_via_api

tests/all/externals.rs:391–438  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

389
390#[test]
391fn read_write_memory_via_api() {
392 let cfg = Config::new();
393 let mut store = Store::new(&Engine::new(&cfg).unwrap(), ());
394 let ty = MemoryType::new(1, None);
395 let mem = Memory::new(&mut store, ty).unwrap();
396 mem.grow(&mut store, 1).unwrap();
397
398 let value = b"hello wasm";
399 let size = mem.data_size(&store);
400 mem.write(&mut store, size - value.len(), value).unwrap();
401
402 let mut buffer = [0u8; 10];
403 mem.read(&store, mem.data_size(&store) - buffer.len(), &mut buffer)
404 .unwrap();
405 assert_eq!(value, &buffer);
406
407 // Error conditions.
408
409 // Out of bounds write.
410
411 let size = mem.data_size(&store);
412 let res = mem.write(&mut store, size - value.len() + 1, value);
413 assert!(res.is_err());
414 assert_ne!(
415 mem.data(&store)[mem.data_size(&store) - value.len() + 1],
416 value[0],
417 "no data is written",
418 );
419
420 // Out of bounds read.
421
422 buffer[0] = 0x42;
423 let res = mem.read(
424 &store,
425 mem.data_size(&store) - buffer.len() + 1,
426 &mut buffer,
427 );
428 assert!(res.is_err());
429 assert_eq!(buffer[0], 0x42, "no data is read");
430
431 // Read offset overflow.
432 let res = mem.read(&store, usize::MAX, &mut buffer);
433 assert!(res.is_err());
434
435 // Write offset overflow.
436 let res = mem.write(&mut store, usize::MAX, &buffer);
437 assert!(res.is_err());
438}
439
440// Returns (a, b, c) pairs of function type and function such that
441//

Callers

nothing calls this directly

Calls 7

newFunction · 0.50
unwrapMethod · 0.45
growMethod · 0.45
data_sizeMethod · 0.45
writeMethod · 0.45
lenMethod · 0.45
readMethod · 0.45

Tested by

no test coverage detected