@@ -47,8 +47,6 @@ pub enum DecodeError {
47
47
InvalidValue ,
48
48
/// Buffer too short
49
49
ShortRead ,
50
- /// node_announcement included more than one address of a given type!
51
- ExtraAddressesPerType ,
52
50
/// A length descriptor in the packet didn't describe the later data correctly
53
51
BadLengthDescriptor ,
54
52
/// Error from std::io
@@ -677,7 +675,6 @@ impl Error for DecodeError {
677
675
DecodeError :: UnknownRequiredFeature => "Unknown required feature preventing decode" ,
678
676
DecodeError :: InvalidValue => "Nonsense bytes didn't map to the type they were interpreted as" ,
679
677
DecodeError :: ShortRead => "Packet extended beyond the provided bytes" ,
680
- DecodeError :: ExtraAddressesPerType => "More than one address of a single type" ,
681
678
DecodeError :: BadLengthDescriptor => "A length descriptor in the packet didn't describe the later data correctly" ,
682
679
DecodeError :: Io ( ref e) => e. description ( ) ,
683
680
}
@@ -1235,36 +1232,20 @@ impl Readable for UnsignedNodeAnnouncement {
1235
1232
let alias: [ u8 ; 32 ] = Readable :: read ( r) ?;
1236
1233
1237
1234
let addr_len: u16 = Readable :: read ( r) ?;
1238
- let mut addresses: Vec < NetAddress > = Vec :: with_capacity ( 4 ) ;
1235
+ let mut addresses: Vec < NetAddress > = Vec :: new ( ) ;
1236
+ let mut highest_addr_type = 0 ;
1239
1237
let mut addr_readpos = 0 ;
1240
1238
let mut excess = false ;
1241
1239
let mut excess_byte = 0 ;
1242
1240
loop {
1243
1241
if addr_len <= addr_readpos { break ; }
1244
1242
match Readable :: read ( r) {
1245
1243
Ok ( Ok ( addr) ) => {
1246
- match addr {
1247
- NetAddress :: IPv4 { .. } => {
1248
- if addresses. len ( ) > 0 {
1249
- return Err ( DecodeError :: ExtraAddressesPerType ) ;
1250
- }
1251
- } ,
1252
- NetAddress :: IPv6 { .. } => {
1253
- if addresses. len ( ) > 1 || ( addresses. len ( ) == 1 && addresses[ 0 ] . get_id ( ) != 1 ) {
1254
- return Err ( DecodeError :: ExtraAddressesPerType ) ;
1255
- }
1256
- } ,
1257
- NetAddress :: OnionV2 { .. } => {
1258
- if addresses. len ( ) > 2 || ( addresses. len ( ) > 0 && addresses. last ( ) . unwrap ( ) . get_id ( ) > 2 ) {
1259
- return Err ( DecodeError :: ExtraAddressesPerType ) ;
1260
- }
1261
- } ,
1262
- NetAddress :: OnionV3 { .. } => {
1263
- if addresses. len ( ) > 3 || ( addresses. len ( ) > 0 && addresses. last ( ) . unwrap ( ) . get_id ( ) > 3 ) {
1264
- return Err ( DecodeError :: ExtraAddressesPerType ) ;
1265
- }
1266
- } ,
1244
+ if addr. get_id ( ) < highest_addr_type {
1245
+ // Addresses must be sorted in increasing order
1246
+ return Err ( DecodeError :: InvalidValue ) ;
1267
1247
}
1248
+ highest_addr_type = addr. get_id ( ) ;
1268
1249
if addr_len < addr_readpos + 1 + addr. len ( ) {
1269
1250
return Err ( DecodeError :: BadLengthDescriptor ) ;
1270
1251
}
0 commit comments