Add explicit error type for operations on Memory

This commit is contained in:
Mark McCaskey
2020-05-12 14:39:16 -07:00
parent 9c60c23b98
commit 61309d4a40
12 changed files with 164 additions and 44 deletions

View File

@@ -213,7 +213,7 @@ pub unsafe extern "C" fn wasmer_wasi_generate_default_import_object() -> *mut wa
let mut wasi_env = wasi::WasiEnv::new(wasi_state);
// this API will now leak a `Memory`
let memory_type = MemoryType::new(0, None, false);
let memory = Memory::new(store, memory_type);
let memory = Memory::new(store, memory_type).expect("create memory");
wasi_env.set_memory(&memory);
// TODO(mark): review lifetime of `Memory` here
let import_object = Box::new(wasi::generate_import_object_from_env(

View File

@@ -69,9 +69,18 @@ pub unsafe extern "C" fn wasmer_memory_new(
};
let store = crate::get_global_store();
let desc = MemoryType::new(Pages(limits.min), max, false);
let new_memory = Memory::new(store, desc);
*memory = Box::into_raw(Box::new(new_memory)) as *mut wasmer_memory_t;
wasmer_result_t::WASMER_OK
match Memory::new(store, desc) {
Ok(new_memory) => {
*memory = Box::into_raw(Box::new(new_memory)) as *mut wasmer_memory_t;
wasmer_result_t::WASMER_OK
}
Err(err) => {
update_last_error(CApiError {
msg: err.to_string(),
});
wasmer_result_t::WASMER_ERROR
}
}
}
/// Grows a memory by the given number of pages (of 65Kb each).
@@ -105,8 +114,13 @@ pub extern "C" fn wasmer_memory_grow(memory: *mut wasmer_memory_t, delta: u32) -
let grow_result = memory.grow(Pages(delta));
match grow_result {
Some(_) => wasmer_result_t::WASMER_OK,
_ => wasmer_result_t::WASMER_ERROR,
Ok(_) => wasmer_result_t::WASMER_OK,
Err(err) => {
update_last_error(CApiError {
msg: err.to_string(),
});
wasmer_result_t::WASMER_ERROR
}
}
}

View File

@@ -40,7 +40,7 @@ int main()
char *error_str = malloc(error_len);
wasmer_last_error_message(error_str, error_len);
printf("Error str: `%s`\n", error_str);
assert(0 == strcmp(error_str, "Failed to add pages because would exceed maximum number of pages for the memory. Left: 22, Added: 15"));
assert(0 == strcmp(error_str, "Memory could not grow 10 more pages (12 pages currently) without exceeding the maximum of 15 pages"));
free(error_str);
wasmer_memory_t *bad_memory = NULL;
@@ -58,7 +58,7 @@ int main()
char *error_str2 = malloc(error_len2);
wasmer_last_error_message(error_str2, error_len2);
printf("Error str 2: `%s`\n", error_str2);
assert(0 == strcmp(error_str2, "Unable to create because the supplied descriptor is invalid: \"Max number of memory pages is less than the minimum number of pages\""));
assert(0 == strcmp(error_str2, "The given memory plan was invalid because the maximum allowed memory (10 pages) is less than the minimum required memory (15 pages)"));
free(error_str2);
printf("Destroy memory\n");