Skip to content

Commit dec7ec1

Browse files
committed
Fix bogus Event::PaymentSent serialization
`Event::PaymentSent` serialization has a bug where we double-serialize the payment_preimage field but do not attempt to read it twice. This results in a failure to read `ChannelManager`s from disk if we have a pending `Event::PaymentSent` pending awaiting handling when we serialize. Instead of attempting to read both versions, we opt to simply fix the serialization, assuming it is exceedingly rare for such a scenario to appear (and if it does, we can assist in manual recovery). The release notes have been updated to note this inconsistency. Found by the chanmon_consistency fuzz target.
1 parent ecddfe1 commit dec7ec1

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
# 0.0.99 - WIP
2+
3+
## Serialization Compatibility
4+
5+
* Due to a bug discovered in 0.0.98, if a `ChannelManager` is serialized on
6+
version 0.0.98 while an `Event::PaymentSent` is pending processing, the
7+
`ChannelManager` will fail to deserialize both on version 0.0.98 and later
8+
versions. If you have such a `ChannelManager` available, a simple patch will
9+
allow it to deserialize, please file an issue if you need assistance.
10+
111
# 0.0.98 - 2021-06-11
212

313
0.0.98 should be considered a release candidate to the first alpha release of

lightning/src/util/events.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,6 @@ impl Writeable for Event {
160160
write_tlv_fields!(writer, {
161161
(0, payment_preimage, required),
162162
});
163-
payment_preimage.write(writer)?;
164163
},
165164
&Event::PaymentFailed { ref payment_hash, ref rejected_by_dest,
166165
#[cfg(test)]

0 commit comments

Comments
 (0)