@@ -671,26 +671,44 @@ impl FromStr for NetAddress {
671
671
let port: u16 = addr. port ( ) ;
672
672
match addr {
673
673
SocketAddr :: V4 ( addr) => {
674
- let addr = addr. ip ( ) . to_string ( ) . parse :: < Ipv4Addr > ( ) ? ;
675
- return Ok ( NetAddress :: IPv4 { addr : addr . octets ( ) , port } ) ;
674
+ let addr = addr. ip ( ) . octets ( ) ;
675
+ return Ok ( NetAddress :: IPv4 { addr, port } ) ;
676
676
} ,
677
677
SocketAddr :: V6 ( addr) => {
678
- let addr = addr. ip ( ) . to_string ( ) . parse :: < Ipv6Addr > ( ) ? ;
679
- return Ok ( NetAddress :: IPv6 { addr : addr . octets ( ) , port } ) ;
678
+ let addr = addr. ip ( ) . octets ( ) ;
679
+ return Ok ( NetAddress :: IPv6 { addr, port } ) ;
680
680
} ,
681
681
}
682
682
} ,
683
683
Err ( e) => {
684
- let trimmed_input = s. rfind ( ":" ) . expect ( "Invalid input, needs to include seperator \" :\" " ) ;
684
+ let trimmed_input = match s. rfind ( ":" ) {
685
+ Some ( pos) => pos,
686
+ None => return Err ( e) ,
687
+ } ;
685
688
let host = & s[ ..trimmed_input] ;
686
- let port: u16 = s[ trimmed_input + 1 ..] . parse ( ) . expect ( "Invalid input, port needs to be u16" ) ;
689
+ let port: u16 = match s[ trimmed_input + 1 ..] . parse ( ) {
690
+ Ok ( port) => port,
691
+ Err ( _) => return Err ( e) ,
692
+ } ;
687
693
if host. ends_with ( ".onion" ) {
688
- let onion = host. split ( ".onion" ) . collect :: < Vec < & str > > ( ) [ 0 ] ;
689
- let onion = base32:: decode ( base32:: Alphabet :: RFC4648 { padding : false } , & onion) . expect ( "Error decoding onion address" ) ;
690
- let version = onion[ 0 ] ;
694
+ let onion = match host. split ( ".onion" ) . nth ( 0 ) {
695
+ Some ( onion) => onion,
696
+ None => return Err ( e) ,
697
+ } ;
698
+ let onion = match base32:: decode ( base32:: Alphabet :: RFC4648 { padding : false } , & onion) {
699
+ Some ( onion) => onion,
700
+ None => return Err ( e) ,
701
+ } ;
702
+ let version = match onion. get ( 0 ) {
703
+ Some ( version) => version,
704
+ None => return Err ( e) ,
705
+ } ;
691
706
let checksum = u16:: from_be_bytes ( [ onion[ 1 ] , onion[ 2 ] ] ) ;
692
- let ed25519_pubkey = onion[ 3 ..35 ] . try_into ( ) . expect ( "Invalid onion address" ) ;
693
- return Ok ( NetAddress :: OnionV3 { ed25519_pubkey, checksum, version, port } ) ;
707
+ let ed25519_pubkey = match onion[ 3 ..35 ] . try_into ( ) {
708
+ Ok ( ed25519_pubkey) => ed25519_pubkey,
709
+ Err ( _) => return Err ( e) ,
710
+ } ;
711
+ return Ok ( NetAddress :: OnionV3 { ed25519_pubkey, checksum, version : * version, port } ) ;
694
712
}
695
713
696
714
if let Ok ( hostname) = Hostname :: try_from ( host. to_string ( ) ) {
0 commit comments