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

Function growth_trap

tests/all/limits.rs:1111–1166  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

1109#[test]
1110#[cfg_attr(miri, ignore)]
1111fn growth_trap() -> Result<()> {
1112 let engine = Engine::default();
1113 let module = Module::new(
1114 &engine,
1115 r#"(module
1116 (memory $m (export "m") 0)
1117 (table (export "t") 0 funcref)
1118 (func (export "grow") (param i32) (result i32)
1119 (memory.grow $m (local.get 0)))
1120 )"#,
1121 )?;
1122
1123 let mut store = Store::new(
1124 &engine,
1125 StoreLimitsBuilder::new()
1126 .memory_size(WASM_PAGE_SIZE)
1127 .table_elements(1)
1128 .trap_on_grow_failure(true)
1129 .build(),
1130 );
1131 store.limiter(|s| s as &mut dyn ResourceLimiter);
1132
1133 let instance = Instance::new(&mut store, &module, &[])?;
1134
1135 // Test instance exports and host objects hitting the limit
1136 for memory in [
1137 instance.get_memory(&mut store, "m").unwrap(),
1138 Memory::new(&mut store, MemoryType::new(0, None))?,
1139 ] {
1140 memory.grow(&mut store, 1)?;
1141 assert!(memory.grow(&mut store, 1).is_err());
1142 }
1143
1144 // Test instance exports and host objects hitting the limit
1145 for table in [
1146 instance.get_table(&mut store, "t").unwrap(),
1147 Table::new(
1148 &mut store,
1149 TableType::new(RefType::FUNCREF, 0, None),
1150 Ref::Func(None),
1151 )?,
1152 ] {
1153 table.grow(&mut store, 1, Ref::Func(None))?;
1154 assert!(table.grow(&mut store, 1, Ref::Func(None)).is_err());
1155 }
1156
1157 let mut store = Store::new(&engine, store.data().clone());
1158 store.limiter(|s| s as &mut dyn ResourceLimiter);
1159 let instance = Instance::new(&mut store, &module, &[])?;
1160 let grow = instance.get_func(&mut store, "grow").unwrap();
1161 let grow = grow.typed::<i32, i32>(&store).unwrap();
1162 grow.call(&mut store, 1)?;
1163 assert!(grow.call(&mut store, 1).is_err());
1164
1165 Ok(())
1166}

Callers

nothing calls this directly

Calls 15

OkFunction · 0.85
trap_on_grow_failureMethod · 0.80
memory_sizeMethod · 0.80
newFunction · 0.50
FuncEnum · 0.50
buildMethod · 0.45
table_elementsMethod · 0.45
limiterMethod · 0.45
unwrapMethod · 0.45
get_memoryMethod · 0.45
growMethod · 0.45
get_tableMethod · 0.45

Tested by

no test coverage detected