فهرست منبع

[runtime/import/merkle] replace assertion by returning an error

ertosns 2 سال پیش
والد
کامیت
27f123da5a
2فایلهای تغییر یافته به همراه10 افزوده شده و 9 حذف شده
  1. 4 2
      src/runtime/import/merkle.rs
  2. 6 7
      src/runtime/memory.rs

+ 4 - 2
src/runtime/import/merkle.rs

@@ -208,8 +208,10 @@ pub(crate) fn merkle_add(ctx: FunctionEnvMut<Env>, ptr: WasmPtr<u8>, len: u32) -
                 //assert_eq!(root_index.len(), 4);
                 debug!(target: "runtime::merkle", "Appending Merkle root to db: {:?}", root);
                 let root_value: Vec<u8> = serialize(root);
-                // FIXME: This assert can be used to DoS nodes from contracts
-                assert_eq!(root_value.len(), 32);
+                if root_value.len() != 32 {
+                    error!(target: "runtime::merkle", "Couldn't serialize root value");
+                    return -2
+                }
                 if overlay.insert(&db_roots.tree, &root_value, &[]).is_err() {
                     error!(target: "runtime::merkle", "Couldn't insert to db_roots tree");
                     return -2

+ 6 - 7
src/runtime/memory.rs

@@ -36,13 +36,12 @@ impl<'a> MemoryManipulation for MemoryView<'a> {
     }
 }
 
-
 #[cfg(test)]
 mod tests {
-    use wasmer::{WasmPtr, MemoryType, Memory, Store};
     use super::*;
-    use std::io::Cursor;
     use darkfi_serial::Decodable;
+    use std::io::Cursor;
+    use wasmer::{Memory, MemoryType, Store, WasmPtr};
 
     #[test]
     fn test_memoryview_writeslice() {
@@ -54,7 +53,7 @@ mod tests {
         assert!(res.is_ok());
         let ptr: WasmPtr<u8> = WasmPtr::new(0);
         let slice = ptr.slice(&view, value.len() as u32);
-        let mut buf: [u8; 3] = [0;3];
+        let mut buf: [u8; 3] = [0; 3];
         let _ = slice.expect("err").read_slice(&mut buf);
         assert_eq!(buf, value);
     }
@@ -69,13 +68,13 @@ mod tests {
         assert!(res.is_ok());
         let ptr: WasmPtr<u8> = WasmPtr::new(0);
         let slice = ptr.slice(&view, value.len() as u32)?;
-        let mut buf: [u8; 3] = [0;3];
+        let mut buf: [u8; 3] = [0; 3];
         let _ = slice.read_slice(&mut buf);
         let mut buf_reader = Cursor::new(buf);
         let ret: [u8; 3] = Decodable::decode(&mut buf_reader)?;
-        assert!(buf.len()==(slice.len() as usize));
+        assert!(buf.len() == (slice.len() as usize));
         assert_eq!(ret, value);
-        assert!(buf_reader.position()==slice.len());
+        assert!(buf_reader.position() == slice.len());
         Ok(())
     }
 }