From e4a1f6dc826ee931fb60bdf0e6e7f909bd2414ce Mon Sep 17 00:00:00 2001 From: Radek Zikmund Date: Wed, 2 Sep 2026 17:46:23 +0200 Subject: [PATCH 1/2] Don't pass empty string as SNI to QUIC --- .../src/System/Net/Quic/QuicConnection.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) 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 da129e4e0da6f8..3edecd7aeb56f7 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 @@ -424,11 +424,11 @@ private async ValueTask FinishConnectAsync(QuicClientConnectionOptions options, // RFC 6066 forbids IP literals. // IDN mapping is handled by MsQuic. - string sni = (IPAddress.IsValid(options.ClientAuthenticationOptions.TargetHost) ? null : options.ClientAuthenticationOptions.TargetHost) ?? host ?? string.Empty; + string? sni = (IPAddress.IsValid(options.ClientAuthenticationOptions.TargetHost) ? null : options.ClientAuthenticationOptions.TargetHost) ?? host; unsafe { - byte* targetHostPtr = Utf8StringMarshaller.ConvertToUnmanaged(sni); + byte* targetHostPtr = sni != null ? Utf8StringMarshaller.ConvertToUnmanaged(sni) : null; try { ThrowHelper.ThrowIfMsQuicError(MsQuicApi.Api.ConnectionStart( @@ -441,7 +441,10 @@ private async ValueTask FinishConnectAsync(QuicClientConnectionOptions options, } finally { - Utf8StringMarshaller.Free(targetHostPtr); + if (targetHostPtr != null) + { + Utf8StringMarshaller.Free(targetHostPtr); + } } } } From 8a8730792f25887b673e3ef09786d62f553f2552 Mon Sep 17 00:00:00 2001 From: Radek Zikmund <32671551+rzikm@users.noreply.github.com> Date: Wed, 2 Sep 2026 18:15:36 +0200 Subject: [PATCH 2/2] Apply suggestion from @rzikm --- .../System.Net.Quic/src/System/Net/Quic/QuicConnection.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 3edecd7aeb56f7..b18786a2190083 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 @@ -428,7 +428,7 @@ private async ValueTask FinishConnectAsync(QuicClientConnectionOptions options, unsafe { - byte* targetHostPtr = sni != null ? Utf8StringMarshaller.ConvertToUnmanaged(sni) : null; + byte* targetHostPtr = !string.IsNullOrEmpty(sni) ? Utf8StringMarshaller.ConvertToUnmanaged(sni) : null; try { ThrowHelper.ThrowIfMsQuicError(MsQuicApi.Api.ConnectionStart(