Fix crash introduced in #124

I'm rapidly starting to regret holding failed HTLCs in Channel,
given we allow them to violate the no-duplicate-hashes
precondition.

Found by fuzzer
This commit is contained in:
Matt Corallo 2018-08-24 11:52:55 -04:00
parent a66e597e95
commit 4f77c812a4

View file

@ -1018,10 +1018,13 @@ impl Channel {
for (idx, htlc) in self.pending_htlcs.iter().enumerate() {
if !htlc.outbound && htlc.payment_hash == payment_hash_calc &&
htlc.state != HTLCState::LocalRemoved && htlc.state != HTLCState::LocalRemovedAwaitingCommitment {
if pending_idx != std::usize::MAX {
panic!("Duplicate HTLC payment_hash, ChannelManager should have prevented this!");
if let Some(PendingHTLCStatus::Fail(_)) = htlc.pending_forward_state {
} else {
if pending_idx != std::usize::MAX {
panic!("Duplicate HTLC payment_hash, ChannelManager should have prevented this!");
}
pending_idx = idx;
}
pending_idx = idx;
}
}
if pending_idx == std::usize::MAX {