From fef604cab87f963b2232b28bba7cbebc50e116e7 Mon Sep 17 00:00:00 2001 From: Stephen Toub Date: Thu, 6 Jul 2017 11:15:11 -0400 Subject: [PATCH 1/2] Wrap CurlHandler cert validation callback exceptions in HttpRequestException --- .../src/System/Net/Http/Unix/CurlHandler.SslProvider.cs | 2 +- .../FunctionalTests/HttpClientHandlerTest.ServerCertificates.cs | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/System.Net.Http/src/System/Net/Http/Unix/CurlHandler.SslProvider.cs b/src/System.Net.Http/src/System/Net/Http/Unix/CurlHandler.SslProvider.cs index 0d4930f1df9b..bd2914277066 100644 --- a/src/System.Net.Http/src/System/Net/Http/Unix/CurlHandler.SslProvider.cs +++ b/src/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(exc)); return FailureResult; } finally diff --git a/src/System.Net.Http/tests/FunctionalTests/HttpClientHandlerTest.ServerCertificates.cs b/src/System.Net.Http/tests/FunctionalTests/HttpClientHandlerTest.ServerCertificates.cs index 8593c5b08076..2428d74ce7f9 100644 --- a/src/System.Net.Http/tests/FunctionalTests/HttpClientHandlerTest.ServerCertificates.cs +++ b/src/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() From e519de6eb96ae9c13075c1fa4691770a32157298 Mon Sep 17 00:00:00 2001 From: Stephen Toub Date: Thu, 6 Jul 2017 14:48:36 -0400 Subject: [PATCH 2/2] Address PR feedback --- .../src/System/Net/Http/Unix/CurlException.cs | 5 +++++ .../src/System/Net/Http/Unix/CurlHandler.SslProvider.cs | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/System.Net.Http/src/System/Net/Http/Unix/CurlException.cs b/src/System.Net.Http/src/System/Net/Http/Unix/CurlException.cs index cdf114b3adab..67da37e89dc1 100644 --- a/src/System.Net.Http/src/System/Net/Http/Unix/CurlException.cs +++ b/src/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/System.Net.Http/src/System/Net/Http/Unix/CurlHandler.SslProvider.cs b/src/System.Net.Http/src/System/Net/Http/Unix/CurlHandler.SslProvider.cs index bd2914277066..d66abc7b046f 100644 --- a/src/System.Net.Http/src/System/Net/Http/Unix/CurlHandler.SslProvider.cs +++ b/src/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(CreateHttpRequestException(exc)); + easy.FailRequest(CreateHttpRequestException(new CurlException((int)CURLcode.CURLE_ABORTED_BY_CALLBACK, exc))); return FailureResult; } finally