diff --git a/src/libraries/Common/src/Interop/OSX/Interop.CoreFoundation.CFNumber.cs b/src/libraries/Common/src/Interop/OSX/Interop.CoreFoundation.CFNumber.cs
index 22d51bdd11cc36..52d3d0621ad426 100644
--- a/src/libraries/Common/src/Interop/OSX/Interop.CoreFoundation.CFNumber.cs
+++ b/src/libraries/Common/src/Interop/OSX/Interop.CoreFoundation.CFNumber.cs
@@ -11,12 +11,13 @@ internal static partial class Interop
{
internal static partial class CoreFoundation
{
- internal enum CFNumberType
+ // CFNumberType is based on CFIndex, which is 64-bit on supported Apple platforms.
+ internal enum CFNumberType : long
{
kCFNumberIntType = 9,
}
[LibraryImport(Libraries.CoreFoundationLibrary)]
- private static unsafe partial int CFNumberGetValue(IntPtr handle, CFNumberType type, int* value);
+ private static unsafe partial byte CFNumberGetValue(IntPtr handle, CFNumberType type, int* value);
}
}
diff --git a/src/libraries/System.Net.Http/tests/UnitTests/CFProxyTest.cs b/src/libraries/System.Net.Http/tests/UnitTests/CFProxyTest.cs
new file mode 100644
index 00000000000000..f18e80d23340c4
--- /dev/null
+++ b/src/libraries/System.Net.Http/tests/UnitTests/CFProxyTest.cs
@@ -0,0 +1,52 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Runtime.InteropServices;
+using Microsoft.Win32.SafeHandles;
+using Xunit;
+
+internal static partial class Interop
+{
+ internal static partial class Libraries
+ {
+ // The unit-test assembly also includes Windows interop for the proxy fakes.
+ internal const string CoreFoundationLibrary = "/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation";
+ internal const string CFNetworkLibrary = "/System/Library/Frameworks/CFNetwork.framework/CFNetwork";
+ }
+}
+
+namespace System.Net.Http.Tests
+{
+ public partial class CFProxyTest
+ {
+ [LibraryImport(Interop.Libraries.CFNetworkLibrary)]
+ private static partial SafeCFArrayHandle CFNetworkCopyProxiesForAutoConfigurationScript(
+ SafeCreateHandle script, SafeCreateHandle targetUrl, out SafeCFErrorHandle error);
+
+ [Theory]
+ [InlineData("PROXY 127.0.0.1:1", 1)]
+ [InlineData("PROXY 127.0.0.1:80", 80)]
+ [InlineData("PROXY 127.0.0.1:443", 443)]
+ [InlineData("PROXY 127.0.0.1:8080", 8080)]
+ [InlineData("PROXY 127.0.0.1:65535", 65535)]
+ [InlineData("DIRECT", -1)]
+ public void ProxyAutoConfiguration_ReadsPortNumber(string scriptResult, int expectedPort)
+ {
+ using SafeCreateHandle script = Interop.CoreFoundation.CFStringCreateWithCString(
+ $"function FindProxyForURL(url, host) {{ return '{scriptResult}'; }}");
+ using SafeCreateHandle url = Interop.CoreFoundation.CFURLCreateWithString("https://example.invalid/");
+ using SafeCFArrayHandle proxies = CFNetworkCopyProxiesForAutoConfigurationScript(script, url, out SafeCFErrorHandle error);
+ using (error)
+ {
+ Assert.True(error.IsInvalid, Interop.CoreFoundation.GetErrorDescription(error));
+ Assert.False(proxies.IsInvalid);
+ Assert.Equal(1, Interop.CoreFoundation.CFArrayGetCount(proxies));
+
+ using SafeCFDictionaryHandle dictionary = new SafeCFDictionaryHandle(
+ Interop.CoreFoundation.CFArrayGetValueAtIndex(proxies, 0), ownsHandle: false);
+ Interop.CoreFoundation.CFProxy proxy = new Interop.CoreFoundation.CFProxy(dictionary);
+ Assert.Equal(expectedPort, proxy.PortNumber);
+ }
+ }
+ }
+}
diff --git a/src/libraries/System.Net.Http/tests/UnitTests/System.Net.Http.Unit.Tests.csproj b/src/libraries/System.Net.Http/tests/UnitTests/System.Net.Http.Unit.Tests.csproj
index 43167dc48c6007..c3274f64237d71 100755
--- a/src/libraries/System.Net.Http/tests/UnitTests/System.Net.Http.Unit.Tests.csproj
+++ b/src/libraries/System.Net.Http/tests/UnitTests/System.Net.Http.Unit.Tests.csproj
@@ -430,4 +430,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+