From f6e70779fe67838a8bbabfef3f47fd4c0cdddd1a Mon Sep 17 00:00:00 2001 From: Greg Fitzgerald Date: Sat, 16 Jun 2018 09:18:42 -0600 Subject: [PATCH] Don't panic if sent a bad packet --- src/ledger.rs | 20 ++++++++++++++------ src/replicate_stage.rs | 2 +- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/ledger.rs b/src/ledger.rs index 85bc6cb59..e76c46934 100644 --- a/src/ledger.rs +++ b/src/ledger.rs @@ -1,7 +1,7 @@ //! The `ledger` module provides functions for parallel verification of the //! Proof of History ledger. -use bincode::{deserialize, serialize_into}; +use bincode::{self, deserialize, serialize_into}; use entry::{next_entry, Entry}; use hash::Hash; use packet; @@ -104,12 +104,12 @@ pub fn next_entries( entries } -pub fn reconstruct_entries_from_blobs(blobs: &VecDeque) -> Vec { +pub fn reconstruct_entries_from_blobs(blobs: &VecDeque) -> bincode::Result> { let mut entries_to_apply: Vec = Vec::new(); let mut last_id = Hash::default(); for msgs in blobs { let blob = msgs.read().unwrap(); - let entries: Vec = deserialize(&blob.data()[..blob.meta.size]).unwrap(); + let entries: Vec = deserialize(&blob.data()[..blob.meta.size])?; for entry in entries { if entry.id == last_id { if let Some(last_entry) = entries_to_apply.last_mut() { @@ -120,9 +120,8 @@ pub fn reconstruct_entries_from_blobs(blobs: &VecDeque) -> Vec Result<()> { let timer = Duration::new(1, 0); let blobs = blob_receiver.recv_timeout(timer)?; - let entries = ledger::reconstruct_entries_from_blobs(&blobs); + let entries = ledger::reconstruct_entries_from_blobs(&blobs)?; let res = bank.process_entries(entries); if res.is_err() { error!("process_entries {} {:?}", blobs.len(), res);