mirror of
https://github.com/fluencelabs/wasmer
synced 2025-06-24 22:21:32 +00:00
Fix Windows crash on caching compiled artifact.
Memory clone function wasn't able to write to new reserved memory object. Changed so allocating Memory objects with protection flag allocates commited memory.
This commit is contained in:
@ -33,7 +33,13 @@ impl Memory {
|
|||||||
|
|
||||||
let protect = protection.to_protect_const();
|
let protect = protection.to_protect_const();
|
||||||
|
|
||||||
let ptr = unsafe { VirtualAlloc(ptr::null_mut(), size, MEM_RESERVE, protect) };
|
let flags = if protection == Protect::None {
|
||||||
|
MEM_RESERVE
|
||||||
|
} else {
|
||||||
|
MEM_RESERVE | MEM_COMMIT
|
||||||
|
};
|
||||||
|
|
||||||
|
let ptr = unsafe { VirtualAlloc(ptr::null_mut(), size, flags, protect) };
|
||||||
|
|
||||||
if ptr.is_null() {
|
if ptr.is_null() {
|
||||||
Err("unable to allocate memory".to_string())
|
Err("unable to allocate memory".to_string())
|
||||||
@ -229,3 +235,25 @@ fn round_up_to_page_size(size: usize, page_size: usize) -> usize {
|
|||||||
fn round_down_to_page_size(size: usize, page_size: usize) -> usize {
|
fn round_down_to_page_size(size: usize, page_size: usize) -> usize {
|
||||||
size & !(page_size - 1)
|
size & !(page_size - 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn clone() {
|
||||||
|
// these should work
|
||||||
|
let _ = Memory::with_size_protect(200_000, Protect::Read)
|
||||||
|
.unwrap()
|
||||||
|
.clone();
|
||||||
|
let _ = Memory::with_size_protect(200_000, Protect::ReadWrite)
|
||||||
|
.unwrap()
|
||||||
|
.clone();
|
||||||
|
let _ = Memory::with_size_protect(200_000, Protect::ReadExec)
|
||||||
|
.unwrap()
|
||||||
|
.clone();
|
||||||
|
|
||||||
|
// this would cause segmentation fault as uncommited memory with no access
|
||||||
|
//let _ = Memory::with_size_protect(200_000, Protect::None).unwrap().clone();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user