From da8094f0e5507f1254b9150bdccaeba646b0298b Mon Sep 17 00:00:00 2001 From: Stephen Toub Date: Thu, 6 Jul 2017 16:37:20 -0400 Subject: [PATCH] Wrap CurlHandler cert validation callback exceptions in HttpRequestException (dotnet/corefx#21938) * Wrap CurlHandler cert validation callback exceptions in HttpRequestException * Address PR feedback Commit migrated from https://github.com/dotnet/corefx/commit/9d74fcf4534894f375caebe20bfe62dd7af7fbd0 --- .../src/System/Net/Http/Unix/CurlException.cs | 5 +++++ .../src/System/Net/Http/Unix/CurlHandler.SslProvider.cs | 2 +- .../HttpClientHandlerTest.ServerCertificates.cs | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/libraries/System.Net.Http/src/System/Net/Http/Unix/CurlException.cs b/src/libraries/System.Net.Http/src/System/Net/Http/Unix/CurlException.cs index cdf114b3adab1e..67da37e89dc1b1 100644 --- a/src/libraries/System.Net.Http/src/System/Net/Http/Unix/CurlException.cs +++ b/src/libraries/System.Net.Http/src/System/Net/Http/Unix/CurlException.cs @@ -13,6 +13,11 @@ internal CurlException(int error, string message) : base(message) HResult = error; } + internal CurlException(int error, Exception innerException) : base(GetCurlErrorString(error, isMulti:false), innerException) + { + HResult = error; + } + internal CurlException(int error, bool isMulti) : this(error, GetCurlErrorString(error, isMulti)) { } diff --git a/src/libraries/System.Net.Http/src/System/Net/Http/Unix/CurlHandler.SslProvider.cs b/src/libraries/System.Net.Http/src/System/Net/Http/Unix/CurlHandler.SslProvider.cs index 0d4930f1df9bfb..d66abc7b046fba 100644 --- a/src/libraries/System.Net.Http/src/System/Net/Http/Unix/CurlHandler.SslProvider.cs +++ b/src/libraries/System.Net.Http/src/System/Net/Http/Unix/CurlHandler.SslProvider.cs @@ -266,7 +266,7 @@ private static int VerifyCertChain(IntPtr storeCtxPtr, IntPtr curlPtr) catch (Exception exc) { EventSourceTrace("Unexpected exception: {0}", exc, easy: easy); - easy.FailRequest(exc); + easy.FailRequest(CreateHttpRequestException(new CurlException((int)CURLcode.CURLE_ABORTED_BY_CALLBACK, exc))); return FailureResult; } finally diff --git a/src/libraries/System.Net.Http/tests/FunctionalTests/HttpClientHandlerTest.ServerCertificates.cs b/src/libraries/System.Net.Http/tests/FunctionalTests/HttpClientHandlerTest.ServerCertificates.cs index 8593c5b08076e1..2428d74ce7f948 100644 --- a/src/libraries/System.Net.Http/tests/FunctionalTests/HttpClientHandlerTest.ServerCertificates.cs +++ b/src/libraries/System.Net.Http/tests/FunctionalTests/HttpClientHandlerTest.ServerCertificates.cs @@ -162,6 +162,7 @@ public async Task UseCallback_CallbackReturnsFailure_ThrowsException() } } + [ActiveIssue(21904)] [OuterLoop] // TODO: Issue #11345 [Fact] public async Task UseCallback_CallbackThrowsException_ExceptionPropagates()