diff --git a/src/libraries/System.Net.Quic/src/System/Net/Quic/QuicConnection.cs b/src/libraries/System.Net.Quic/src/System/Net/Quic/QuicConnection.cs index 13351faaa20c0b..49d0dbc424131e 100644 --- a/src/libraries/System.Net.Quic/src/System/Net/Quic/QuicConnection.cs +++ b/src/libraries/System.Net.Quic/src/System/Net/Quic/QuicConnection.cs @@ -300,11 +300,11 @@ private async ValueTask FinishConnectAsync(QuicClientConnectionOptions options, options.ClientAuthenticationOptions.CertificateChainPolicy?.Clone()); _configuration = MsQuicConfiguration.Create(options); - // RFC 6066 forbids IP literals - // DNI mapping is handled by MsQuic - string sni = (TargetHostNameHelper.IsValidAddress(options.ClientAuthenticationOptions.TargetHost) ? null : options.ClientAuthenticationOptions.TargetHost) ?? host ?? address?.ToString() ?? string.Empty; + // RFC 6066 forbids IP literals. + // IDN mapping is handled by MsQuic. + string? sni = (TargetHostNameHelper.IsValidAddress(options.ClientAuthenticationOptions.TargetHost) ? null : options.ClientAuthenticationOptions.TargetHost) ?? host; - IntPtr targetHostPtr = Marshal.StringToCoTaskMemUTF8(sni); + IntPtr targetHostPtr = !string.IsNullOrEmpty(sni) ? Marshal.StringToCoTaskMemUTF8(sni) : IntPtr.Zero; try { unsafe @@ -320,7 +320,10 @@ private async ValueTask FinishConnectAsync(QuicClientConnectionOptions options, } finally { - Marshal.FreeCoTaskMem(targetHostPtr); + if (targetHostPtr != IntPtr.Zero) + { + Marshal.FreeCoTaskMem(targetHostPtr); + } } }