Darwin Chen.local 23.4.0 Darwin Kernel Version 23.4.0: Fri Mar 15 00:10:42 PDT 2024; root:xnu-10063.101.17~1/RELEASE_ARM64_T6000 arm64
Description
When I make a request to an local IPv6 endpoint using this code, the program crashes.
let dst = "https://[fd1b:aeaa:6cd1:1747:1403:a845:82e5:fcf6]:15220";
let verifier = Arc::new(NoVerifier());
let tls_config = ClientTlsConfig::new().verifier(verifier);
let endpoint = Channel::from_shared(dst)
.map_err(|e| Error::InvalidUri(e.to_string()))?
.tls_config(tls_config)?;
let channel = endpoint.connect().await?;
I found that the IpAddr cannot be parsed correctly because the parameter passed in when resolving the service address was not processed at all.
Bug Report
Version
Platform
Darwin Chen.local 23.4.0 Darwin Kernel Version 23.4.0: Fri Mar 15 00:10:42 PDT 2024; root:xnu-10063.101.17~1/RELEASE_ARM64_T6000 arm64
Description
When I make a request to an local IPv6 endpoint using this code, the program crashes.
I found that the
IpAddr
cannot be parsed correctly because the parameter passed in when resolving the service address was not processed at all.In the source code of
tonic
:https://github.com/hyperium/tonic/blob/068421a0bdd966eada1cc2aab70fa0845a4bb87a/tonic/src/transport/channel/tls.rs#L72-L83
The code here directly obtains the corresponding domain information through
uri.host()
. Then it is passed intoTlsConnector::new
.After passing in the parameters, construct
TlsConnector
:https://github.com/hyperium/tonic/blob/068421a0bdd966eada1cc2aab70fa0845a4bb87a/tonic/src/transport/service/tls.rs#L37-L71
In line 68 of the code, construct
ServerName
by passing parameters throughServerName::try_from
. It crashes here.The reason is that the domain information obtained by
uri.host()
includes[
and]
, which prevents the IPv6 address from being resolved correctly here.