@@ -143,65 +143,66 @@ impl<NG: Deref<Target=NetworkGraph<L>>, L: Deref> RapidGossipSync<NG, L> where L
143143 let current_node_id = NodeId :: from_pubkey ( & current_pubkey) ;
144144 node_ids. push ( current_pubkey) ;
145145
146- let mut synthetic_node_announcement = UnsignedNodeAnnouncement {
147- features : NodeFeatures :: empty ( ) ,
148- timestamp : backdated_timestamp,
149- node_id : current_node_id,
150- rgb : [ 0 , 0 , 0 ] ,
151- alias : NodeAlias ( [ 0u8 ; 32 ] ) ,
152- addresses : Vec :: new ( ) ,
153- excess_address_data : Vec :: new ( ) ,
154- excess_data : Vec :: new ( ) ,
155- } ;
156-
157- read_only_network_graph. nodes ( )
158- . get ( & current_node_id)
159- . and_then ( |node| node. announcement_info . as_ref ( ) )
160- . map ( |info| {
161- synthetic_node_announcement. features = info. features ( ) . clone ( ) ;
162- synthetic_node_announcement. rgb = info. rgb ( ) . clone ( ) ;
163- synthetic_node_announcement. alias = info. alias ( ) . clone ( ) ;
164- synthetic_node_announcement. addresses = info. addresses ( ) . clone ( ) ;
165- } ) ;
166-
167- if has_address_details {
168- let address_count: u8 = Readable :: read ( read_cursor) ?;
169- let mut node_addresses: Vec < SocketAddress > = Vec :: new ( ) ;
170- for address_index in 0 ..address_count {
171- let current_byte_count: u8 = Readable :: read ( read_cursor) ?;
172- let mut address_reader = FixedLengthReader :: new ( & mut read_cursor, current_byte_count as u64 ) ;
173- let mut address_bytes = Vec :: new ( ) ;
174- address_reader. read_to_end ( & mut address_bytes) ?;
175-
176- let mut address_cursor = io:: Cursor :: new ( & address_bytes) ;
177- if let Ok ( current_address) = Readable :: read ( & mut address_cursor) {
178- node_addresses. push ( current_address) ;
179- } else {
180- // Do not crash to allow future socket address forwards compatibility
181- log_gossip ! (
146+
147+ if has_address_details || feature_detail_marker > 0 {
148+ let mut synthetic_node_announcement = UnsignedNodeAnnouncement {
149+ features : NodeFeatures :: empty ( ) ,
150+ timestamp : backdated_timestamp,
151+ node_id : current_node_id,
152+ rgb : [ 0 , 0 , 0 ] ,
153+ alias : NodeAlias ( [ 0u8 ; 32 ] ) ,
154+ addresses : Vec :: new ( ) ,
155+ excess_address_data : Vec :: new ( ) ,
156+ excess_data : Vec :: new ( ) ,
157+ } ;
158+
159+ read_only_network_graph. nodes ( )
160+ . get ( & current_node_id)
161+ . and_then ( |node| node. announcement_info . as_ref ( ) )
162+ . map ( |info| {
163+ synthetic_node_announcement. features = info. features ( ) . clone ( ) ;
164+ synthetic_node_announcement. rgb = info. rgb ( ) . clone ( ) ;
165+ synthetic_node_announcement. alias = info. alias ( ) . clone ( ) ;
166+ synthetic_node_announcement. addresses = info. addresses ( ) . clone ( ) ;
167+ } ) ;
168+
169+ if has_address_details {
170+ let address_count: u8 = Readable :: read ( read_cursor) ?;
171+ let mut node_addresses: Vec < SocketAddress > = Vec :: new ( ) ;
172+ for address_index in 0 ..address_count {
173+ let current_byte_count: u8 = Readable :: read ( read_cursor) ?;
174+ let mut address_reader = FixedLengthReader :: new ( & mut read_cursor, current_byte_count as u64 ) ;
175+ if let Ok ( current_address) = Readable :: read ( & mut address_reader) {
176+ node_addresses. push ( current_address) ;
177+ if address_reader. bytes_remain ( ) {
178+ return Err ( DecodeError :: ShortRead . into ( ) ) ;
179+ }
180+ } else {
181+ // Do not crash to allow future socket address forwards compatibility
182+ log_gossip ! (
182183 self . logger,
183- "Failure to parse address at index {} for node ID {}: {:?} " ,
184- address_index, current_node_id, address_bytes
184+ "Failure to parse address at index {} for node ID {}" ,
185+ address_index, current_node_id
185186 ) ;
187+ address_reader. eat_remaining ( ) ?;
188+ }
186189 }
190+ synthetic_node_announcement. addresses = node_addresses;
187191 }
188- synthetic_node_announcement. addresses = node_addresses;
189- }
190192
191- if feature_detail_marker > 0 {
192- if feature_detail_marker < 7 {
193- let feature_index = ( feature_detail_marker - 1 ) as usize ;
194- synthetic_node_announcement. features = default_node_features
195- . get ( feature_index)
196- . ok_or ( DecodeError :: InvalidValue ) ?
197- . clone ( ) ;
198- } else {
199- let node_features: NodeFeatures = Readable :: read ( read_cursor) ?;
200- synthetic_node_announcement. features = node_features;
193+ if feature_detail_marker > 0 {
194+ if feature_detail_marker < 7 {
195+ let feature_index = ( feature_detail_marker - 1 ) as usize ;
196+ synthetic_node_announcement. features = default_node_features
197+ . get ( feature_index)
198+ . ok_or ( DecodeError :: InvalidValue ) ?
199+ . clone ( ) ;
200+ } else {
201+ let node_features: NodeFeatures = Readable :: read ( read_cursor) ?;
202+ synthetic_node_announcement. features = node_features;
203+ }
201204 }
202- }
203205
204- if feature_detail_marker > 0 || has_address_details {
205206 node_modifications. push ( synthetic_node_announcement) ;
206207 }
207208
0 commit comments