@@ -143,65 +143,65 @@ impl<NG: Deref<Target=NetworkGraph<L>>, L: Deref> RapidGossipSync<NG, L> where L
143
143
let current_node_id = NodeId :: from_pubkey ( & current_pubkey) ;
144
144
node_ids. push ( current_pubkey) ;
145
145
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 ! (
182
182
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
185
185
) ;
186
+ address_reader. eat_remaining ( ) ?;
187
+ }
186
188
}
189
+ synthetic_node_announcement. addresses = node_addresses;
187
190
}
188
- synthetic_node_announcement. addresses = node_addresses;
189
- }
190
191
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
+ }
201
203
}
202
- }
203
204
204
- if feature_detail_marker > 0 || has_address_details {
205
205
node_modifications. push ( synthetic_node_announcement) ;
206
206
}
207
207
0 commit comments