Fix access to VMMemoryDefinition::current_length on big-endian (#3013)
The current_length member is defined as "usize" in Rust code, but generated wasm code refers to it as if it were "u32". While this happens to mostly work on little-endian machines (as long as the length is < 4GB), it will always fail on big-endian machines. Fixed by making current_length "u32" in Rust as well, and ensuring the actual memory size is always less than 4GB.
This commit is contained in:
@@ -309,7 +309,7 @@ fn check_memory_init_bounds(
|
||||
let end = start.checked_add(init.data.len());
|
||||
|
||||
match end {
|
||||
Some(end) if end <= memory.current_length => {
|
||||
Some(end) if end <= memory.current_length as usize => {
|
||||
// Initializer is in bounds
|
||||
}
|
||||
_ => {
|
||||
@@ -382,8 +382,9 @@ fn initialize_instance(
|
||||
MemoryInitialization::Paged { map, out_of_bounds } => {
|
||||
for (index, pages) in map {
|
||||
let memory = instance.memory(index);
|
||||
let slice =
|
||||
unsafe { slice::from_raw_parts_mut(memory.base, memory.current_length) };
|
||||
let slice = unsafe {
|
||||
slice::from_raw_parts_mut(memory.base, memory.current_length as usize)
|
||||
};
|
||||
|
||||
for (page_index, page) in pages.iter().enumerate() {
|
||||
if let Some(data) = page {
|
||||
|
||||
Reference in New Issue
Block a user