X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Futil%2Fpersist.rs;h=af66e1233aba2965efafac46eff0e0a04bfd9fa3;hb=aa9c601774b11d1ef2958961f7479599625e798b;hp=ca0605c95983afd3b370cafddaf82de2868dadfb;hpb=cc1b505b305c5339496d9aaca28c73b083ba602f;p=rust-lightning diff --git a/lightning/src/util/persist.rs b/lightning/src/util/persist.rs index ca0605c9..af66e123 100644 --- a/lightning/src/util/persist.rs +++ b/lightning/src/util/persist.rs @@ -174,8 +174,8 @@ impl<'a, A: KVStore, M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Der impl Persist for K { // TODO: We really need a way for the persister to inform the user that its time to crash/shut // down once these start returning failure. - // A PermanentFailure implies we should probably just shut down the node since we're - // force-closing channels without even broadcasting! + // An InProgress result implies we should probably just shut down the node since we're not + // retrying persistence! fn persist_new_channel(&self, funding_txo: OutPoint, monitor: &ChannelMonitor, _update_id: MonitorUpdateId) -> chain::ChannelMonitorUpdateStatus { let key = format!("{}_{}", funding_txo.txid.to_hex(), funding_txo.index); @@ -185,7 +185,7 @@ impl Persist chain::ChannelMonitorUpdateStatus::Completed, - Err(_) => chain::ChannelMonitorUpdateStatus::PermanentFailure, + Err(_) => chain::ChannelMonitorUpdateStatus::InProgress } } @@ -197,7 +197,7 @@ impl Persist chain::ChannelMonitorUpdateStatus::Completed, - Err(_) => chain::ChannelMonitorUpdateStatus::PermanentFailure, + Err(_) => chain::ChannelMonitorUpdateStatus::InProgress } } } @@ -216,6 +216,12 @@ where for stored_key in kv_store.list( CHANNEL_MONITOR_PERSISTENCE_NAMESPACE, CHANNEL_MONITOR_PERSISTENCE_SUB_NAMESPACE)? { + if stored_key.len() < 66 { + return Err(io::Error::new( + io::ErrorKind::InvalidData, + "Stored key has invalid length")); + } + let txid = Txid::from_hex(stored_key.split_at(64).0).map_err(|_| { io::Error::new(io::ErrorKind::InvalidData, "Invalid tx ID in stored key") })?;