Skip to content

Commit 77c4506

Browse files
valentinewallacevss96
authored andcommitted
# This is a combination of 11 commits.
# This is the 1st commit message: test utils: refactor fail_payment_along_route for mpp # This is the commit message #2: Add MppId field to HTLCSource as a way to correlate mpp payment paths # This is the commit message #3: Implement Readable/Writeable for HashSet To be used in upcoming commits for MPP ID storage # This is the commit message #4: Add MPP ID to pending_outbound_htlcs We'll use this to correlate MPP shards in upcoming commits # This is the commit message #5: Prevent duplicate PaymentSent events by removing all pending outbound payments associated with the same MPP payment after the preimage is received # This is the commit message #6: Add all_paths_failed field to PaymentFailed see field docs for details # This is the commit message #7: Drop writer size hinting/message vec preallocation In order to avoid significant malloc traffic, messages previously explicitly stated their serialized length allowing for Vec preallocation during the message serialization pipeline. This added some amount of complexity in the serialization code, but did avoid some realloc() calls. Instead, here, we drop all the complexity in favor of a fixed 2KiB buffer for all message serialization. This should not only be simpler with a similar reduction in realloc() traffic, but also may reduce heap fragmentation by allocating identically-sized buffers more often. # This is the commit message #8: [fuzz] Swap mode on most messages to account for TLV suffix # This is the commit message #9: Add forward-compat due serialization variants of HTLCFailureMsg Going forward, all lightning messages have a TLV stream suffix, allowing new fields to be added as needed. In the P2P protocol, messages have an explicit length, so there is no implied length in the TLV stream itself. HTLCFailureMsg enum variants have messages in them, but without a size prefix or any explicit end. Thus, if a HTLCFailureMsg is read as a part of a ChannelManager, with a TLV stream at the end, there is no way to differentiate between the end of the message and the next field(s) in the ChannelManager. Here we add two new variant values for HTLCFailureMsg variants in the read path, allowing us to switch to the new values if/when we add new TLV fields in UpdateFailHTLC or UpdateFailMalformedHTLC so that older versions can still read the new TLV fields. # This is the commit message #10: Convert most P2P msg serialization to a new macro with TLV suffixes The network serialization format for all messages was changed some time ago to include a TLV suffix for all messages, however we never bothered to implement it as there isn't a lot of use validating a TLV stream with nothing to do with it. However, messages are increasingly utilizing the TLV suffix feature, and there are some compatibility concerns with messages written as a part of other structs having their format changed (see previous commit). Thus, here we go ahead and convert most message serialization to a new macro which includes a TLV suffix after a series of fields, simplifying several serialization implementations in the process. # This is the commit message #11: Update docs to specify where process events is called
1 parent 088daf7 commit 77c4506

37 files changed

+563
-481
lines changed

fuzz/src/chanmon_consistency.rs

-3
Original file line numberDiff line numberDiff line change
@@ -94,9 +94,6 @@ impl Writer for VecWriter {
9494
self.0.extend_from_slice(buf);
9595
Ok(())
9696
}
97-
fn size_hint(&mut self, size: usize) {
98-
self.0.reserve_exact(size);
99-
}
10097
}
10198

10299
struct TestChainMonitor {

fuzz/src/chanmon_deser.rs

-3
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,6 @@ impl Writer for VecWriter {
1818
self.0.extend_from_slice(buf);
1919
Ok(())
2020
}
21-
fn size_hint(&mut self, size: usize) {
22-
self.0.reserve_exact(size);
23-
}
2421
}
2522

2623
#[inline]

fuzz/src/msg_targets/gen_target.sh

+23-23
Original file line numberDiff line numberDiff line change
@@ -11,36 +11,36 @@ echo "mod utils;" > mod.rs
1111

1212
# Note when adding new targets here you should add a similar line in src/bin/gen_target.sh
1313

14-
GEN_TEST AcceptChannel test_msg ""
15-
GEN_TEST AnnouncementSignatures test_msg ""
14+
GEN_TEST AcceptChannel test_msg_simple ""
15+
GEN_TEST AnnouncementSignatures test_msg_simple ""
16+
GEN_TEST ClosingSigned test_msg_simple ""
17+
GEN_TEST CommitmentSigned test_msg_simple ""
18+
GEN_TEST FundingCreated test_msg_simple ""
19+
GEN_TEST FundingLocked test_msg_simple ""
20+
GEN_TEST FundingSigned test_msg_simple ""
21+
GEN_TEST GossipTimestampFilter test_msg_simple ""
22+
GEN_TEST Init test_msg_simple ""
23+
GEN_TEST OnionHopData test_msg_simple ""
24+
GEN_TEST OpenChannel test_msg_simple ""
25+
GEN_TEST Ping test_msg_simple ""
26+
GEN_TEST Pong test_msg_simple ""
27+
GEN_TEST QueryChannelRange test_msg_simple ""
28+
GEN_TEST ReplyShortChannelIdsEnd test_msg_simple ""
29+
GEN_TEST RevokeAndACK test_msg_simple ""
30+
GEN_TEST Shutdown test_msg_simple ""
31+
GEN_TEST UpdateAddHTLC test_msg_simple ""
32+
GEN_TEST UpdateFailHTLC test_msg_simple ""
33+
GEN_TEST UpdateFailMalformedHTLC test_msg_simple ""
34+
GEN_TEST UpdateFee test_msg_simple ""
35+
GEN_TEST UpdateFulfillHTLC test_msg_simple ""
36+
1637
GEN_TEST ChannelReestablish test_msg ""
17-
GEN_TEST CommitmentSigned test_msg ""
1838
GEN_TEST DecodedOnionErrorPacket test_msg ""
19-
GEN_TEST FundingCreated test_msg ""
20-
GEN_TEST FundingLocked test_msg ""
21-
GEN_TEST FundingSigned test_msg ""
22-
GEN_TEST OpenChannel test_msg ""
23-
GEN_TEST RevokeAndACK test_msg ""
24-
GEN_TEST Shutdown test_msg ""
25-
GEN_TEST UpdateFailHTLC test_msg ""
26-
GEN_TEST UpdateFailMalformedHTLC test_msg ""
27-
GEN_TEST UpdateFee test_msg ""
28-
GEN_TEST UpdateFulfillHTLC test_msg ""
2939

3040
GEN_TEST ChannelAnnouncement test_msg_exact ""
3141
GEN_TEST NodeAnnouncement test_msg_exact ""
3242
GEN_TEST QueryShortChannelIds test_msg ""
33-
GEN_TEST ReplyShortChannelIdsEnd test_msg ""
34-
GEN_TEST QueryChannelRange test_msg ""
3543
GEN_TEST ReplyChannelRange test_msg ""
36-
GEN_TEST GossipTimestampFilter test_msg ""
3744

38-
GEN_TEST UpdateAddHTLC test_msg_hole ", 85, 33"
3945
GEN_TEST ErrorMessage test_msg_hole ", 32, 2"
4046
GEN_TEST ChannelUpdate test_msg_hole ", 108, 1"
41-
42-
GEN_TEST ClosingSigned test_msg_simple ""
43-
GEN_TEST Init test_msg_simple ""
44-
GEN_TEST OnionHopData test_msg_simple ""
45-
GEN_TEST Ping test_msg_simple ""
46-
GEN_TEST Pong test_msg_simple ""

fuzz/src/msg_targets/mod.rs

+11-11
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,31 @@
11
mod utils;
22
pub mod msg_accept_channel;
33
pub mod msg_announcement_signatures;
4-
pub mod msg_channel_reestablish;
4+
pub mod msg_closing_signed;
55
pub mod msg_commitment_signed;
6-
pub mod msg_decoded_onion_error_packet;
76
pub mod msg_funding_created;
87
pub mod msg_funding_locked;
98
pub mod msg_funding_signed;
9+
pub mod msg_gossip_timestamp_filter;
10+
pub mod msg_init;
11+
pub mod msg_onion_hop_data;
1012
pub mod msg_open_channel;
13+
pub mod msg_ping;
14+
pub mod msg_pong;
15+
pub mod msg_query_channel_range;
16+
pub mod msg_reply_short_channel_ids_end;
1117
pub mod msg_revoke_and_ack;
1218
pub mod msg_shutdown;
19+
pub mod msg_update_add_htlc;
1320
pub mod msg_update_fail_htlc;
1421
pub mod msg_update_fail_malformed_htlc;
1522
pub mod msg_update_fee;
1623
pub mod msg_update_fulfill_htlc;
24+
pub mod msg_channel_reestablish;
25+
pub mod msg_decoded_onion_error_packet;
1726
pub mod msg_channel_announcement;
1827
pub mod msg_node_announcement;
1928
pub mod msg_query_short_channel_ids;
20-
pub mod msg_reply_short_channel_ids_end;
21-
pub mod msg_query_channel_range;
2229
pub mod msg_reply_channel_range;
23-
pub mod msg_gossip_timestamp_filter;
24-
pub mod msg_update_add_htlc;
2530
pub mod msg_error_message;
2631
pub mod msg_channel_update;
27-
pub mod msg_closing_signed;
28-
pub mod msg_init;
29-
pub mod msg_onion_hop_data;
30-
pub mod msg_ping;
31-
pub mod msg_pong;

fuzz/src/msg_targets/msg_accept_channel.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ use utils::test_logger;
1717

1818
#[inline]
1919
pub fn msg_accept_channel_test<Out: test_logger::Output>(data: &[u8], _out: Out) {
20-
test_msg!(msgs::AcceptChannel, data);
20+
test_msg_simple!(msgs::AcceptChannel, data);
2121
}
2222

2323
#[no_mangle]
2424
pub extern "C" fn msg_accept_channel_run(data: *const u8, datalen: usize) {
2525
let data = unsafe { std::slice::from_raw_parts(data, datalen) };
26-
test_msg!(msgs::AcceptChannel, data);
26+
test_msg_simple!(msgs::AcceptChannel, data);
2727
}

fuzz/src/msg_targets/msg_announcement_signatures.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ use utils::test_logger;
1717

1818
#[inline]
1919
pub fn msg_announcement_signatures_test<Out: test_logger::Output>(data: &[u8], _out: Out) {
20-
test_msg!(msgs::AnnouncementSignatures, data);
20+
test_msg_simple!(msgs::AnnouncementSignatures, data);
2121
}
2222

2323
#[no_mangle]
2424
pub extern "C" fn msg_announcement_signatures_run(data: *const u8, datalen: usize) {
2525
let data = unsafe { std::slice::from_raw_parts(data, datalen) };
26-
test_msg!(msgs::AnnouncementSignatures, data);
26+
test_msg_simple!(msgs::AnnouncementSignatures, data);
2727
}

fuzz/src/msg_targets/msg_commitment_signed.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ use utils::test_logger;
1717

1818
#[inline]
1919
pub fn msg_commitment_signed_test<Out: test_logger::Output>(data: &[u8], _out: Out) {
20-
test_msg!(msgs::CommitmentSigned, data);
20+
test_msg_simple!(msgs::CommitmentSigned, data);
2121
}
2222

2323
#[no_mangle]
2424
pub extern "C" fn msg_commitment_signed_run(data: *const u8, datalen: usize) {
2525
let data = unsafe { std::slice::from_raw_parts(data, datalen) };
26-
test_msg!(msgs::CommitmentSigned, data);
26+
test_msg_simple!(msgs::CommitmentSigned, data);
2727
}

fuzz/src/msg_targets/msg_funding_created.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ use utils::test_logger;
1717

1818
#[inline]
1919
pub fn msg_funding_created_test<Out: test_logger::Output>(data: &[u8], _out: Out) {
20-
test_msg!(msgs::FundingCreated, data);
20+
test_msg_simple!(msgs::FundingCreated, data);
2121
}
2222

2323
#[no_mangle]
2424
pub extern "C" fn msg_funding_created_run(data: *const u8, datalen: usize) {
2525
let data = unsafe { std::slice::from_raw_parts(data, datalen) };
26-
test_msg!(msgs::FundingCreated, data);
26+
test_msg_simple!(msgs::FundingCreated, data);
2727
}

fuzz/src/msg_targets/msg_funding_locked.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ use utils::test_logger;
1717

1818
#[inline]
1919
pub fn msg_funding_locked_test<Out: test_logger::Output>(data: &[u8], _out: Out) {
20-
test_msg!(msgs::FundingLocked, data);
20+
test_msg_simple!(msgs::FundingLocked, data);
2121
}
2222

2323
#[no_mangle]
2424
pub extern "C" fn msg_funding_locked_run(data: *const u8, datalen: usize) {
2525
let data = unsafe { std::slice::from_raw_parts(data, datalen) };
26-
test_msg!(msgs::FundingLocked, data);
26+
test_msg_simple!(msgs::FundingLocked, data);
2727
}

fuzz/src/msg_targets/msg_funding_signed.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ use utils::test_logger;
1717

1818
#[inline]
1919
pub fn msg_funding_signed_test<Out: test_logger::Output>(data: &[u8], _out: Out) {
20-
test_msg!(msgs::FundingSigned, data);
20+
test_msg_simple!(msgs::FundingSigned, data);
2121
}
2222

2323
#[no_mangle]
2424
pub extern "C" fn msg_funding_signed_run(data: *const u8, datalen: usize) {
2525
let data = unsafe { std::slice::from_raw_parts(data, datalen) };
26-
test_msg!(msgs::FundingSigned, data);
26+
test_msg_simple!(msgs::FundingSigned, data);
2727
}

fuzz/src/msg_targets/msg_gossip_timestamp_filter.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ use utils::test_logger;
1717

1818
#[inline]
1919
pub fn msg_gossip_timestamp_filter_test<Out: test_logger::Output>(data: &[u8], _out: Out) {
20-
test_msg!(msgs::GossipTimestampFilter, data);
20+
test_msg_simple!(msgs::GossipTimestampFilter, data);
2121
}
2222

2323
#[no_mangle]
2424
pub extern "C" fn msg_gossip_timestamp_filter_run(data: *const u8, datalen: usize) {
2525
let data = unsafe { std::slice::from_raw_parts(data, datalen) };
26-
test_msg!(msgs::GossipTimestampFilter, data);
26+
test_msg_simple!(msgs::GossipTimestampFilter, data);
2727
}

fuzz/src/msg_targets/msg_open_channel.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ use utils::test_logger;
1717

1818
#[inline]
1919
pub fn msg_open_channel_test<Out: test_logger::Output>(data: &[u8], _out: Out) {
20-
test_msg!(msgs::OpenChannel, data);
20+
test_msg_simple!(msgs::OpenChannel, data);
2121
}
2222

2323
#[no_mangle]
2424
pub extern "C" fn msg_open_channel_run(data: *const u8, datalen: usize) {
2525
let data = unsafe { std::slice::from_raw_parts(data, datalen) };
26-
test_msg!(msgs::OpenChannel, data);
26+
test_msg_simple!(msgs::OpenChannel, data);
2727
}

fuzz/src/msg_targets/msg_query_channel_range.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ use utils::test_logger;
1717

1818
#[inline]
1919
pub fn msg_query_channel_range_test<Out: test_logger::Output>(data: &[u8], _out: Out) {
20-
test_msg!(msgs::QueryChannelRange, data);
20+
test_msg_simple!(msgs::QueryChannelRange, data);
2121
}
2222

2323
#[no_mangle]
2424
pub extern "C" fn msg_query_channel_range_run(data: *const u8, datalen: usize) {
2525
let data = unsafe { std::slice::from_raw_parts(data, datalen) };
26-
test_msg!(msgs::QueryChannelRange, data);
26+
test_msg_simple!(msgs::QueryChannelRange, data);
2727
}

fuzz/src/msg_targets/msg_reply_short_channel_ids_end.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ use utils::test_logger;
1717

1818
#[inline]
1919
pub fn msg_reply_short_channel_ids_end_test<Out: test_logger::Output>(data: &[u8], _out: Out) {
20-
test_msg!(msgs::ReplyShortChannelIdsEnd, data);
20+
test_msg_simple!(msgs::ReplyShortChannelIdsEnd, data);
2121
}
2222

2323
#[no_mangle]
2424
pub extern "C" fn msg_reply_short_channel_ids_end_run(data: *const u8, datalen: usize) {
2525
let data = unsafe { std::slice::from_raw_parts(data, datalen) };
26-
test_msg!(msgs::ReplyShortChannelIdsEnd, data);
26+
test_msg_simple!(msgs::ReplyShortChannelIdsEnd, data);
2727
}

fuzz/src/msg_targets/msg_revoke_and_ack.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ use utils::test_logger;
1717

1818
#[inline]
1919
pub fn msg_revoke_and_ack_test<Out: test_logger::Output>(data: &[u8], _out: Out) {
20-
test_msg!(msgs::RevokeAndACK, data);
20+
test_msg_simple!(msgs::RevokeAndACK, data);
2121
}
2222

2323
#[no_mangle]
2424
pub extern "C" fn msg_revoke_and_ack_run(data: *const u8, datalen: usize) {
2525
let data = unsafe { std::slice::from_raw_parts(data, datalen) };
26-
test_msg!(msgs::RevokeAndACK, data);
26+
test_msg_simple!(msgs::RevokeAndACK, data);
2727
}

fuzz/src/msg_targets/msg_shutdown.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ use utils::test_logger;
1717

1818
#[inline]
1919
pub fn msg_shutdown_test<Out: test_logger::Output>(data: &[u8], _out: Out) {
20-
test_msg!(msgs::Shutdown, data);
20+
test_msg_simple!(msgs::Shutdown, data);
2121
}
2222

2323
#[no_mangle]
2424
pub extern "C" fn msg_shutdown_run(data: *const u8, datalen: usize) {
2525
let data = unsafe { std::slice::from_raw_parts(data, datalen) };
26-
test_msg!(msgs::Shutdown, data);
26+
test_msg_simple!(msgs::Shutdown, data);
2727
}

fuzz/src/msg_targets/msg_update_add_htlc.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ use utils::test_logger;
1717

1818
#[inline]
1919
pub fn msg_update_add_htlc_test<Out: test_logger::Output>(data: &[u8], _out: Out) {
20-
test_msg_hole!(msgs::UpdateAddHTLC, data, 85, 33);
20+
test_msg_simple!(msgs::UpdateAddHTLC, data);
2121
}
2222

2323
#[no_mangle]
2424
pub extern "C" fn msg_update_add_htlc_run(data: *const u8, datalen: usize) {
2525
let data = unsafe { std::slice::from_raw_parts(data, datalen) };
26-
test_msg_hole!(msgs::UpdateAddHTLC, data, 85, 33);
26+
test_msg_simple!(msgs::UpdateAddHTLC, data);
2727
}

fuzz/src/msg_targets/msg_update_fail_htlc.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ use utils::test_logger;
1717

1818
#[inline]
1919
pub fn msg_update_fail_htlc_test<Out: test_logger::Output>(data: &[u8], _out: Out) {
20-
test_msg!(msgs::UpdateFailHTLC, data);
20+
test_msg_simple!(msgs::UpdateFailHTLC, data);
2121
}
2222

2323
#[no_mangle]
2424
pub extern "C" fn msg_update_fail_htlc_run(data: *const u8, datalen: usize) {
2525
let data = unsafe { std::slice::from_raw_parts(data, datalen) };
26-
test_msg!(msgs::UpdateFailHTLC, data);
26+
test_msg_simple!(msgs::UpdateFailHTLC, data);
2727
}

fuzz/src/msg_targets/msg_update_fail_malformed_htlc.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ use utils::test_logger;
1717

1818
#[inline]
1919
pub fn msg_update_fail_malformed_htlc_test<Out: test_logger::Output>(data: &[u8], _out: Out) {
20-
test_msg!(msgs::UpdateFailMalformedHTLC, data);
20+
test_msg_simple!(msgs::UpdateFailMalformedHTLC, data);
2121
}
2222

2323
#[no_mangle]
2424
pub extern "C" fn msg_update_fail_malformed_htlc_run(data: *const u8, datalen: usize) {
2525
let data = unsafe { std::slice::from_raw_parts(data, datalen) };
26-
test_msg!(msgs::UpdateFailMalformedHTLC, data);
26+
test_msg_simple!(msgs::UpdateFailMalformedHTLC, data);
2727
}

fuzz/src/msg_targets/msg_update_fee.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ use utils::test_logger;
1717

1818
#[inline]
1919
pub fn msg_update_fee_test<Out: test_logger::Output>(data: &[u8], _out: Out) {
20-
test_msg!(msgs::UpdateFee, data);
20+
test_msg_simple!(msgs::UpdateFee, data);
2121
}
2222

2323
#[no_mangle]
2424
pub extern "C" fn msg_update_fee_run(data: *const u8, datalen: usize) {
2525
let data = unsafe { std::slice::from_raw_parts(data, datalen) };
26-
test_msg!(msgs::UpdateFee, data);
26+
test_msg_simple!(msgs::UpdateFee, data);
2727
}

fuzz/src/msg_targets/msg_update_fulfill_htlc.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ use utils::test_logger;
1717

1818
#[inline]
1919
pub fn msg_update_fulfill_htlc_test<Out: test_logger::Output>(data: &[u8], _out: Out) {
20-
test_msg!(msgs::UpdateFulfillHTLC, data);
20+
test_msg_simple!(msgs::UpdateFulfillHTLC, data);
2121
}
2222

2323
#[no_mangle]
2424
pub extern "C" fn msg_update_fulfill_htlc_run(data: *const u8, datalen: usize) {
2525
let data = unsafe { std::slice::from_raw_parts(data, datalen) };
26-
test_msg!(msgs::UpdateFulfillHTLC, data);
26+
test_msg_simple!(msgs::UpdateFulfillHTLC, data);
2727
}

0 commit comments

Comments
 (0)