@@ -143,65 +143,65 @@ 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+ if has_address_details || feature_detail_marker > 0 {
147+ let mut synthetic_node_announcement = UnsignedNodeAnnouncement {
148+ features : NodeFeatures :: empty ( ) ,
149+ timestamp : backdated_timestamp ,
150+ node_id : current_node_id ,
151+ rgb : [ 0 , 0 , 0 ] ,
152+ alias : NodeAlias ( [ 0u8 ; 32 ] ) ,
153+ addresses : Vec :: new ( ) ,
154+ excess_address_data : Vec :: new ( ) ,
155+ excess_data : Vec :: new ( ) ,
156+ } ;
157+
158+ read_only_network_graph . nodes ( )
159+ . get ( & current_node_id )
160+ . and_then ( |node| node . announcement_info . as_ref ( ) )
161+ . map ( |info| {
162+ synthetic_node_announcement. features = info. features ( ) . clone ( ) ;
163+ synthetic_node_announcement. rgb = info. rgb ( ) . clone ( ) ;
164+ synthetic_node_announcement. alias = info. alias ( ) . clone ( ) ;
165+ synthetic_node_announcement . addresses = info . addresses ( ) . clone ( ) ;
166+ } ) ;
167+
168+ if has_address_details {
169+ let address_count : u8 = Readable :: read ( read_cursor ) ? ;
170+ let mut node_addresses : Vec < SocketAddress > = Vec :: new ( ) ;
171+ for address_index in 0 ..address_count {
172+ let current_byte_count : u8 = Readable :: read ( read_cursor) ? ;
173+ let mut address_reader = FixedLengthReader :: new ( & mut read_cursor , current_byte_count as u64 ) ;
174+ if let Ok ( current_address ) = Readable :: read ( & mut address_reader ) {
175+ node_addresses . push ( current_address ) ;
176+ if address_reader . bytes_remain ( ) {
177+ return Err ( DecodeError :: ShortRead . into ( ) ) ;
178+ }
179+ } else {
180+ // Do not crash to allow future socket address forwards compatibility
181+ log_gossip ! (
182182 self . logger,
183- "Failure to parse address at index {} for node ID {}: {:?} " ,
184- address_index, current_node_id, address_bytes
183+ "Failure to parse address at index {} for node ID {}" ,
184+ address_index, current_node_id
185185 ) ;
186+ address_reader. eat_remaining ( ) ?;
187+ }
186188 }
189+ synthetic_node_announcement. addresses = node_addresses;
187190 }
188- synthetic_node_announcement. addresses = node_addresses;
189- }
190191
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;
192+ if feature_detail_marker > 0 {
193+ if feature_detail_marker < 7 {
194+ let feature_index = ( feature_detail_marker - 1 ) as usize ;
195+ synthetic_node_announcement. features = default_node_features
196+ . get ( feature_index)
197+ . ok_or ( DecodeError :: InvalidValue ) ?
198+ . clone ( ) ;
199+ } else {
200+ let node_features: NodeFeatures = Readable :: read ( read_cursor) ?;
201+ synthetic_node_announcement. features = node_features;
202+ }
201203 }
202- }
203204
204- if feature_detail_marker > 0 || has_address_details {
205205 node_modifications. push ( synthetic_node_announcement) ;
206206 }
207207
0 commit comments