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
+6 -6
View File
@@ -54,9 +54,9 @@ impl StorageApi for () {
fn read_storage(key: &[u8], value_out: &mut [u8], value_offset: usize) -> Option<usize> {
ext::with(|ext| ext.storage(key).map(|value| {
let value = &value[value_offset..];
let written = std::cmp::min(value.len(), value_out.len());
value_out[..written].copy_from_slice(&value[..written]);
let data = &value[value_offset.min(value.len())..];
let written = std::cmp::min(data.len(), value_out.len());
value_out[..written].copy_from_slice(&data[..written]);
value.len()
})).expect("read_storage cannot be called outside of an Externalities-provided environment.")
}
@@ -85,9 +85,9 @@ impl StorageApi for () {
let storage_key = child_storage_key_or_panic(storage_key);
ext.child_storage(storage_key, key)
.map(|value| {
let value = &value[value_offset..];
let written = std::cmp::min(value.len(), value_out.len());
value_out[..written].copy_from_slice(&value[..written]);
let data = &value[value_offset.min(value.len())..];
let written = std::cmp::min(data.len(), value_out.len());
value_out[..written].copy_from_slice(&data[..written]);
value.len()
})
})