@@ -134,15 +134,16 @@ impl DialRequest {
134
134
PeerId :: try_from ( peer_id)
135
135
. map_err ( |_| io:: Error :: new ( io:: ErrorKind :: InvalidData , "invalid peer id" ) ) ?
136
136
} ;
137
- let addrs = {
138
- let mut maddrs = vec ! [ ] ;
139
- for addr in addrs. into_iter ( ) {
140
- let maddr = Multiaddr :: try_from ( addr)
141
- . map_err ( |err| io:: Error :: new ( io:: ErrorKind :: InvalidData , err) ) ?;
142
- maddrs. push ( maddr) ;
143
- }
144
- maddrs
145
- } ;
137
+ let addrs = addrs
138
+ . into_iter ( )
139
+ . filter_map ( |a| match Multiaddr :: try_from ( a) {
140
+ Ok ( a) => Some ( a) ,
141
+ Err ( e) => {
142
+ log:: debug!( "Unable to parse multiaddr: {e}" ) ;
143
+ None
144
+ }
145
+ } )
146
+ . collect ( ) ;
146
147
Ok ( Self {
147
148
peer_id,
148
149
addresses : addrs,
@@ -333,4 +334,35 @@ mod tests {
333
334
let response2 = DialResponse :: from_bytes ( & bytes) . unwrap ( ) ;
334
335
assert_eq ! ( response, response2) ;
335
336
}
337
+
338
+ #[ test]
339
+ fn test_skip_unparsable_multiaddr ( ) {
340
+ let valid_multiaddr: Multiaddr = "/ip6/2001:db8::/tcp/1234" . parse ( ) . unwrap ( ) ;
341
+ let valid_multiaddr_bytes = valid_multiaddr. to_vec ( ) ;
342
+
343
+ let invalid_multiaddr = {
344
+ let a = vec ! [ 255 ; 8 ] ;
345
+ assert ! ( Multiaddr :: try_from( a. clone( ) ) . is_err( ) ) ;
346
+ a
347
+ } ;
348
+
349
+ let msg = structs_proto:: Message {
350
+ r#type : Some ( structs_proto:: message:: MessageType :: Dial . into ( ) ) ,
351
+ dial : Some ( structs_proto:: message:: Dial {
352
+ peer : Some ( structs_proto:: message:: PeerInfo {
353
+ id : Some ( PeerId :: random ( ) . to_bytes ( ) ) ,
354
+ addrs : vec ! [ valid_multiaddr_bytes, invalid_multiaddr] ,
355
+ } ) ,
356
+ } ) ,
357
+ dial_response : None ,
358
+ } ;
359
+
360
+ let mut bytes = Vec :: with_capacity ( msg. encoded_len ( ) ) ;
361
+ msg. encode ( & mut bytes)
362
+ . expect ( "Vec<u8> provides capacity as needed" ) ;
363
+
364
+ let request = DialRequest :: from_bytes ( & bytes) . expect ( "not to fail" ) ;
365
+
366
+ assert_eq ! ( request. addresses, vec![ valid_multiaddr] )
367
+ }
336
368
}
0 commit comments