Skip to content

Commit 8dd08bd

Browse files
committed
Drop address ordering enforcement in NodeAnnouncement deser
It seems many other nodes never bothered to enforce these requirements, so there's little reason that we should either. cc lightning/bolts#842
1 parent 879e309 commit 8dd08bd

File tree

1 file changed

+2
-19
lines changed

1 file changed

+2
-19
lines changed

lightning/src/ln/msgs.rs

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -391,15 +391,6 @@ pub enum NetAddress {
391391
},
392392
}
393393
impl NetAddress {
394-
fn get_id(&self) -> u8 {
395-
match self {
396-
&NetAddress::IPv4 {..} => { 1 },
397-
&NetAddress::IPv6 {..} => { 2 },
398-
&NetAddress::OnionV2 {..} => { 3 },
399-
&NetAddress::OnionV3 {..} => { 4 },
400-
}
401-
}
402-
403394
/// Strict byte-length of address descriptor, 1-byte type not recorded
404395
fn len(&self) -> u16 {
405396
match self {
@@ -1535,14 +1526,12 @@ impl Writeable for UnsignedNodeAnnouncement {
15351526
w.write_all(&self.rgb)?;
15361527
self.alias.write(w)?;
15371528

1538-
let mut addrs_to_encode = self.addresses.clone();
1539-
addrs_to_encode.sort_by(|a, b| { a.get_id().cmp(&b.get_id()) });
15401529
let mut addr_len = 0;
1541-
for addr in &addrs_to_encode {
1530+
for addr in self.addresses.iter() {
15421531
addr_len += 1 + addr.len();
15431532
}
15441533
(addr_len + self.excess_address_data.len() as u16).write(w)?;
1545-
for addr in addrs_to_encode {
1534+
for addr in self.addresses.iter() {
15461535
addr.write(w)?;
15471536
}
15481537
w.write_all(&self.excess_address_data[..])?;
@@ -1562,19 +1551,13 @@ impl Readable for UnsignedNodeAnnouncement {
15621551

15631552
let addr_len: u16 = Readable::read(r)?;
15641553
let mut addresses: Vec<NetAddress> = Vec::new();
1565-
let mut highest_addr_type = 0;
15661554
let mut addr_readpos = 0;
15671555
let mut excess = false;
15681556
let mut excess_byte = 0;
15691557
loop {
15701558
if addr_len <= addr_readpos { break; }
15711559
match Readable::read(r) {
15721560
Ok(Ok(addr)) => {
1573-
if addr.get_id() < highest_addr_type {
1574-
// Addresses must be sorted in increasing order
1575-
return Err(DecodeError::InvalidValue);
1576-
}
1577-
highest_addr_type = addr.get_id();
15781561
if addr_len < addr_readpos + 1 + addr.len() {
15791562
return Err(DecodeError::BadLengthDescriptor);
15801563
}

0 commit comments

Comments
 (0)