read_storage panics (#3589)

* Add a failing test case

* Actual fix

* read_child_storage, fix wasm side

* Bump the impl version.

* Alternative (#3597)

* Update with_std.rs

* Update with_std.rs

* Update wasm_executor.rs

* Update wasm_executor.rs

* Update with_std.rs

* Update wasm_executor.rs
This commit is contained in:
Sergei Pepyakin
2019-09-11 19:37:19 +02:00
committed by Gavin Wood
parent d136b8eb81
commit 098d880cf9
4 changed files with 79 additions and 14 deletions
+7 -7
View File
@@ -629,9 +629,9 @@ impl_wasm_host_interface! {
)?;
if let Some(value) = maybe_value {
let value = &value[value_offset as usize..];
let written = std::cmp::min(value_len as usize, value.len());
context.write_memory(value_data, &value[..written])
let data = &value[value.len().min(value_offset as usize)..];
let written = std::cmp::min(value_len as usize, data.len());
context.write_memory(value_data, &data[..written])
.map_err(|_| "Invalid attempt to set value in ext_get_storage_into")?;
Ok(value.len() as u32)
} else {
@@ -658,10 +658,10 @@ impl_wasm_host_interface! {
)?;
if let Some(value) = maybe_value {
let value = &value[value_offset as usize..];
let written = std::cmp::min(value_len as usize, value.len());
context.write_memory(value_data, &value[..written])
.map_err(|_| "Invalid attempt to set value in ext_get_child_storage_into")?;
let data = &value[value.len().min(value_offset as usize)..];
let written = std::cmp::min(value_len as usize, data.len());
context.write_memory(value_data, &data[..written])
.map_err(|_| "Invalid attempt to get value in ext_get_child_storage_into")?;
Ok(value.len() as u32)
} else {
Ok(u32::max_value())