diff --git a/Make.config b/Make.config index 650413168b6a..8daac069c8b0 100644 --- a/Make.config +++ b/Make.config @@ -69,9 +69,10 @@ include $(TOP)/mk/mono.mk MONO_HASH := $(NEEDED_MONO_VERSION) # Minimum Mono version for building XI/XM -MIN_MONO_VERSION=6.6.0.117 -MAX_MONO_VERSION=6.6.99 -MIN_MONO_URL=https://xamjenkinsartifact.azureedge.net/build-package-osx-mono/2019-08/117/617f399efca133f357cb8207bc7f58b1120f12f1/MonoFramework-MDK-6.6.0.117.macos10.xamarin.universal.pkg + +MIN_MONO_VERSION=6.8.0.0 +MAX_MONO_VERSION=6.8.99 +MIN_MONO_URL=https://xamjenkinsartifact.azureedge.net/build-package-osx-mono/2019-10/65/18920a83f423fb864a2263948737681968f5b2c8/MonoFramework-MDK-6.8.0.61.macos10.xamarin.universal.pkg # Minimum Mono version for Xamarin.Mac apps using the system mono MIN_XM_MONO_VERSION=6.4.0.94 diff --git a/builds/Makefile b/builds/Makefile index 95e4d1532dd6..a34b888fbb0a 100644 --- a/builds/Makefile +++ b/builds/Makefile @@ -109,6 +109,9 @@ $(SDK_CONFIG): echo "DISABLE_ANDROID=1" > $@ echo "DISABLE_DESKTOP=1" >> $@ echo "DISABLE_WASM=1" >> $@ + echo "ENABLE_IOS=1" >> $@ + echo "ENABLE_MAC=1" >> $@ + ifdef DISABLE_BUILDS_MAKEFILE_DEP BUILDS_MAKEFILE_DEP = diff --git a/mk/mono.mk b/mk/mono.mk index b6818f60c50d..33e19aff914e 100644 --- a/mk/mono.mk +++ b/mk/mono.mk @@ -1,5 +1,5 @@ -NEEDED_MONO_VERSION := 062f0ab8cae60d1d347e4d722884c065c9f34484 -NEEDED_MONO_BRANCH := 2019-08 +NEEDED_MONO_VERSION := 18920a83f423fb864a2263948737681968f5b2c8 +NEEDED_MONO_BRANCH := 2019-10 MONO_DIRECTORY := mono MONO_MODULE := https://github.com/mono/mono diff --git a/runtime/monotouch-main.m b/runtime/monotouch-main.m index deb9e3ab04a2..f55e9a4a73bf 100644 --- a/runtime/monotouch-main.m +++ b/runtime/monotouch-main.m @@ -476,9 +476,7 @@ - (void) memoryWarning: (NSNotification *) sender mono_domain_set_config (mono_domain_get (), base_dir, config_file_name); - MONO_ENTER_GC_SAFE; rv = xamarin_extension_main (argc, argv); - MONO_EXIT_GC_SAFE; break; case XamarinLaunchModeApp: rv = mono_jit_exec (mono_domain_get (), assembly, managed_argc, managed_argv); diff --git a/src/CFNetwork/CFHTTPMessage.cs b/src/CFNetwork/CFHTTPMessage.cs index ca6dd97339da..fa203df0d69f 100644 --- a/src/CFNetwork/CFHTTPMessage.cs +++ b/src/CFNetwork/CFHTTPMessage.cs @@ -80,9 +80,12 @@ static IntPtr GetVersion (Version version) return _HTTPVersion1_1.Handle; else if (version.Equals (HttpVersion.Version10)) return _HTTPVersion1_0.Handle; - else if (version.Major == 2 && version.Minor == 0) - return _HTTPVersion2_0.Handle; - else + else if (version.Major == 2 && version.Minor == 0) { + if (_HTTPVersion2_0 != null && _HTTPVersion2_0.Handle != IntPtr.Zero) + return _HTTPVersion2_0.Handle; + // HTTP 2.0 requires OS X 10.11 or later. + return _HTTPVersion1_1.Handle; + } else throw new ArgumentException (); } diff --git a/src/Foundation/NSUrlSessionHandler.cs b/src/Foundation/NSUrlSessionHandler.cs index 20bb46b6f5c9..059b1ead0f12 100644 --- a/src/Foundation/NSUrlSessionHandler.cs +++ b/src/Foundation/NSUrlSessionHandler.cs @@ -831,7 +831,7 @@ protected override void Dispose (bool disposing) base.Dispose (disposing); } - protected internal override Task SerializeToStreamAsync (Stream stream, TransportContext context) + protected override Task SerializeToStreamAsync (Stream stream, TransportContext context) { if (contentCopied) { if (!content.CanSeek) { diff --git a/src/System.Net.Http/CFContentStream.cs b/src/System.Net.Http/CFContentStream.cs index 42f0142ed564..bdd3518ad57b 100644 --- a/src/System.Net.Http/CFContentStream.cs +++ b/src/System.Net.Http/CFContentStream.cs @@ -125,7 +125,7 @@ public void Close () data_event.Set (); } - protected internal override async Task SerializeToStreamAsync (Stream stream, TransportContext context) + protected override async Task SerializeToStreamAsync (Stream stream, TransportContext context) { while (data_event.WaitOne ()) { data_mutex.WaitOne (); diff --git a/src/System.Net.Http/CFNetworkHandler.cs b/src/System.Net.Http/CFNetworkHandler.cs index 7af25c9628fc..edca57709388 100644 --- a/src/System.Net.Http/CFNetworkHandler.cs +++ b/src/System.Net.Http/CFNetworkHandler.cs @@ -358,7 +358,7 @@ void HandleHasBytesAvailableEvent (object sender, CFStream.StreamEventArgs e) var key = entry.Key.ToString (); var value = entry.Value == null ? string.Empty : entry.Value.ToString (); HttpHeaders item_headers; - if (HttpHeaders.GetKnownHeaderKind (key) == Headers.HttpHeaderKind.Content) { + if (HeaderDescriptor.TryGet (key, out var descriptor) && descriptor.HeaderType == HttpHeaderType.Content) { item_headers = response_msg.Content.Headers; } else { item_headers = response_msg.Headers; diff --git a/tests/bcl-test/common-monotouch_corlib_xunit-test.dll.ignore b/tests/bcl-test/common-monotouch_corlib_xunit-test.dll.ignore index b9ef3636ed12..63c0968430d5 100644 --- a/tests/bcl-test/common-monotouch_corlib_xunit-test.dll.ignore +++ b/tests/bcl-test/common-monotouch_corlib_xunit-test.dll.ignore @@ -414,4 +414,13 @@ System.SpanTests.ReadOnlySpanTests.BinarySearch_Double System.Reflection.Tests.MethodBaseTests.Test_GetCurrentMethod_Inlineable # device issues, it was reported here: https://github.com/mono/mono/issues/14761 -System.Text.Tests.StringBuilderTests.Append_CharPointer_Null_ThrowsNullReferenceException \ No newline at end of file +System.Text.Tests.StringBuilderTests.Append_CharPointer_Null_ThrowsNullReferenceException + +# mono issue: https://github.com/mono/mono/issues/17752 +# Exception messages: System.OutOfMemoryException : Insufficient memory to continue the execution of the program. +Platform32:System.Reflection.Tests.RuntimeReflectionExtensionsTests.GetRuntimeMethod + +# maccore issue: https://github.com/xamarin/maccore/issues/1659 +# random OOMs +Platform32:System.Collections.Tests.HashtableTests.Ctor_Int_Int_GenerateNewPrime +Platform32:System.Tests.BitConverterTests.ToString_ByteArrayTooLong_Throws diff --git a/tests/bcl-test/macOSModern-xammac_net_4_5_System_xunit-test.dll.ignore b/tests/bcl-test/macOSModern-xammac_net_4_5_System_xunit-test.dll.ignore index 9f6934406d85..fb99afd62156 100644 --- a/tests/bcl-test/macOSModern-xammac_net_4_5_System_xunit-test.dll.ignore +++ b/tests/bcl-test/macOSModern-xammac_net_4_5_System_xunit-test.dll.ignore @@ -115,4 +115,4 @@ System.Net.Security.Tests.ApmSslStreamSystemDefaultTest.ClientAndServer_OneOrBot System.Net.Security.Tests.ClientDefaultEncryptionTest.ClientDefaultEncryption_ServerRequireEncryption_ConnectWithEncryption System.Net.Security.Tests.ClientDefaultEncryptionTest.ClientDefaultEncryption_ServerAllowNoEncryption_ConnectWithEncryption System.Net.Security.Tests.ServerAllowNoEncryptionTest.ServerAllowNoEncryption_ClientAllowNoEncryption_ConnectWithEncryption -KLASS:System.Net.Security.Tests.SslStreamSniTest \ No newline at end of file +KLASS:System.Net.Security.Tests.SslStreamSniTest diff --git a/tests/linker/ios/link sdk/HttpClientHandlerTest.cs b/tests/linker/ios/link sdk/HttpClientHandlerTest.cs index e9f2e68461d0..6a347f65ed4e 100644 --- a/tests/linker/ios/link sdk/HttpClientHandlerTest.cs +++ b/tests/linker/ios/link sdk/HttpClientHandlerTest.cs @@ -30,7 +30,6 @@ public void HttpClient () Assert.That (handler.AutomaticDecompression, Is.EqualTo (DecompressionMethods.None), "AutomaticDecompression"); Assert.That (handler.ClientCertificateOptions, Is.EqualTo (ClientCertificateOption.Manual), "ClientCertificateOptions"); Assert.That (handler.MaxAutomaticRedirections, Is.EqualTo (50), "MaxAutomaticRedirections"); - Assert.That (handler.MaxRequestContentBufferSize, Is.EqualTo (Int32.MaxValue), "MaxRequestContentBufferSize"); Assert.Null (handler.Proxy, "Proxy"); Assert.True (handler.SupportsAutomaticDecompression, "SupportsAutomaticDecompression"); Assert.True (handler.SupportsProxy, "SupportsProxy"); diff --git a/tests/mmptest/src/MMPTest.cs b/tests/mmptest/src/MMPTest.cs index c1e3d03c6389..ac7907feb299 100644 --- a/tests/mmptest/src/MMPTest.cs +++ b/tests/mmptest/src/MMPTest.cs @@ -474,9 +474,9 @@ public void HttpClientHandler (string mmpHandler, string expectedHandler) References = " ", TestCode = $@" var client = new System.Net.Http.HttpClient (); - var field = client.GetType ().BaseType.GetField (""handler"", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); + var field = client.GetType ().BaseType.GetField (""_handler"", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); if (field == null) - throw new System.Exception (""Could not find the field 'handler' in HttpClient's base type (which should be 'HttpMessageInvoker').""); + throw new System.Exception (""Could not find the field '_handler' in HttpClient's base type (which should be 'HttpMessageInvoker').""); var fieldValue = field.GetValue (client); if (fieldValue == null) throw new System.Exception (""Unexpected null value found in 'HttpMessageInvoker.handler' field.""); diff --git a/tests/mmptest/src/WarningTests.cs b/tests/mmptest/src/WarningTests.cs index 19877da3baad..21d4cbace551 100644 --- a/tests/mmptest/src/WarningTests.cs +++ b/tests/mmptest/src/WarningTests.cs @@ -14,6 +14,8 @@ public void MM0135 () if (!Directory.Exists (oldXcode)) Assert.Ignore ("This test requires Xcode 9.4 (or updated to a newer one that still warns MM0135)."); + else if (Environment.OSVersion.Version.Major >= 19 /* macOS 10.15+ */) + Assert.Ignore ("Xcode 9.4 does not work on Catalina or later."); // This can check can be removed after switching to a newer Xcode than 9.4. MMPTests.RunMMPTest (tmpDir => { TI.UnifiedTestConfig test = new TI.UnifiedTestConfig (tmpDir); diff --git a/tests/monotouch-test/Network/NWEstablishmentReportTest.cs b/tests/monotouch-test/Network/NWEstablishmentReportTest.cs index eaf28329c1f5..d1a9f7ff44cb 100644 --- a/tests/monotouch-test/Network/NWEstablishmentReportTest.cs +++ b/tests/monotouch-test/Network/NWEstablishmentReportTest.cs @@ -75,8 +75,8 @@ public void Init () [TestFixtureTearDown] public void Dispose() { - report.Dispose (); - connection.Dispose (); + report?.Dispose (); + connection?.Dispose (); } [Test] diff --git a/tests/monotouch-test/Network/NWParametersTest.cs b/tests/monotouch-test/Network/NWParametersTest.cs index 1cdc251c0424..e497944881e5 100644 --- a/tests/monotouch-test/Network/NWParametersTest.cs +++ b/tests/monotouch-test/Network/NWParametersTest.cs @@ -58,9 +58,11 @@ public void Init () [TestFixtureTearDown] public void Dispose() { - connection.Dispose (); - foreach (var i in interfaces) - i.Dispose (); + connection?.Dispose (); + if (interfaces != null) { + foreach (var i in interfaces) + i.Dispose (); + } } [SetUp] diff --git a/tests/monotouch-test/Network/NWProtocolIPOptionsTest.cs b/tests/monotouch-test/Network/NWProtocolIPOptionsTest.cs index 23be8e9e4753..48293dee382c 100644 --- a/tests/monotouch-test/Network/NWProtocolIPOptionsTest.cs +++ b/tests/monotouch-test/Network/NWProtocolIPOptionsTest.cs @@ -66,8 +66,8 @@ public void Init () [TestFixtureTearDown] public void Dispose() { - connection.Dispose (); - stack.Dispose (); + connection?.Dispose (); + stack?.Dispose (); } [SetUp] diff --git a/tests/monotouch-test/Network/NWProtocolStackTest.cs b/tests/monotouch-test/Network/NWProtocolStackTest.cs index f7f7fa2b4af0..426199708ee2 100644 --- a/tests/monotouch-test/Network/NWProtocolStackTest.cs +++ b/tests/monotouch-test/Network/NWProtocolStackTest.cs @@ -56,10 +56,12 @@ public void Init () [TestFixtureTearDown] public void Dispose() { - connection.Dispose (); - stack.Dispose (); - foreach (var o in options) - o.Dispose (); + connection?.Dispose (); + stack?.Dispose (); + if (options != null) { + foreach (var o in options) + o.Dispose (); + } } [SetUp] diff --git a/tests/monotouch-test/System.Net.Http/MessageHandlers.cs b/tests/monotouch-test/System.Net.Http/MessageHandlers.cs index 206e3a4ee36f..da79e3d78345 100644 --- a/tests/monotouch-test/System.Net.Http/MessageHandlers.cs +++ b/tests/monotouch-test/System.Net.Http/MessageHandlers.cs @@ -14,6 +14,7 @@ using NUnit.Framework; using System.Net.Http.Headers; +using System.Security.Authentication; using System.Text; using Foundation; #if MONOMAC @@ -174,24 +175,35 @@ public void RejectSslCertificatesServicePointManager (Type handlerType) Assert.Ignore ("Fails on macOS 10.10: https://github.com/xamarin/maccore/issues/1645"); #endif - bool servicePointManagerCbWasExcuted = false; + bool validationCbWasExecuted = false; + bool customValidationCbWasExecuted = false; + bool invalidServicePointManagerCbWasExcuted = false; bool done = false; Exception ex = null; + Type expectedExceptionType = null; HttpResponseMessage result = null; var handler = GetHandler (handlerType); - if (handler is NSUrlSessionHandler ns) { - ns.TrustOverride += (a,b) => { - servicePointManagerCbWasExcuted = true; + if (handler is HttpClientHandler ch) { + expectedExceptionType = typeof (AuthenticationException); + ch.ServerCertificateCustomValidationCallback = (sender, certificate, chain, errors) => { + validationCbWasExecuted = true; // return false, since we want to test that the exception is raised return false; }; - } else { ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => { - servicePointManagerCbWasExcuted = true; + invalidServicePointManagerCbWasExcuted = true; + return false; + }; + } else if (handler is NSUrlSessionHandler ns) { + expectedExceptionType = typeof (WebException); + ns.TrustOverride += (a,b) => { + validationCbWasExecuted = true; // return false, since we want to test that the exception is raised return false; }; + } else { + Assert.Fail ($"Invalid HttpMessageHandler: '{handler.GetType ()}'."); } TestRuntime.RunAsync (DateTime.Now.AddSeconds (30), async () => @@ -213,11 +225,14 @@ public void RejectSslCertificatesServicePointManager (Type handlerType) if (!done) { // timeouts happen in the bots due to dns issues, connection issues etc.. we do not want to fail Assert.Inconclusive ("Request timedout."); } else { + // the ServicePointManager.ServerCertificateValidationCallback will never be executed. + Assert.False(invalidServicePointManagerCbWasExcuted); + Assert.True(validationCbWasExecuted); // assert the exception type Assert.IsNotNull (ex, (result == null)? "Expected exception is missing and got no result" : $"Expected exception but got {result.Content.ReadAsStringAsync ().Result}"); Assert.IsInstanceOfType (typeof (HttpRequestException), ex); Assert.IsNotNull (ex.InnerException); - Assert.IsInstanceOfType (typeof (WebException), ex.InnerException); + Assert.IsInstanceOfType (expectedExceptionType, ex.InnerException); } } diff --git a/tests/mtouch/MTouch.cs b/tests/mtouch/MTouch.cs index b2b045595cd4..24d3c5c98c26 100644 --- a/tests/mtouch/MTouch.cs +++ b/tests/mtouch/MTouch.cs @@ -3940,9 +3940,9 @@ public class HandlerTest public void Test () {{ var client = new System.Net.Http.HttpClient (); - var field = client.GetType ().BaseType.GetField (""handler"", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); + var field = client.GetType ().BaseType.GetField (""_handler"", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); if (field == null) - throw new System.Exception (""Could not find the field 'handler' in HttpClient's base type (which should be 'HttpMessageInvoker').""); + throw new System.Exception (""Could not find the field '_handler' in HttpClient's base type (which should be 'HttpMessageInvoker').""); var fieldValue = field.GetValue (client); if (fieldValue == null) throw new System.Exception (""Unexpected null value found in 'HttpMessageInvoker.handler' field.""); diff --git a/tests/mtouch/SdkTest.cs b/tests/mtouch/SdkTest.cs index 2338d389bed3..0858fdcd70ab 100644 --- a/tests/mtouch/SdkTest.cs +++ b/tests/mtouch/SdkTest.cs @@ -302,10 +302,23 @@ static string [] GetWatchOSAssemblies () "LLVM failed for 'd__56.MoveNext': non-finally/catch/fault clause.", "LLVM failed for 'd__61`2.MoveNext': non-finally/catch/fault clause.", "LLVM failed for 'd__61`2.MoveNext': non-finally/catch/fault clause.", + "LLVM failed for 'NetworkStream.Read': non-finally/catch/fault clause.", + "LLVM failed for 'NetworkStream.Write': non-finally/catch/fault clause.", + "LLVM failed for 'NetworkStream.BeginRead': non-finally/catch/fault clause.", + "LLVM failed for 'NetworkStream.EndRead': non-finally/catch/fault clause.", + "LLVM failed for 'NetworkStream.BeginWrite': non-finally/catch/fault clause.", + "LLVM failed for 'NetworkStream.EndWrite': non-finally/catch/fault clause.", + "LLVM failed for 'NetworkStream.ReadAsync': non-finally/catch/fault clause.", + "LLVM failed for 'NetworkStream.WriteAsync': non-finally/catch/fault clause.", }) }, { "System.Core.dll", new Tuple (0, new string [] { "LLVM failed for 'EnterTryCatchFinallyInstruction.Run': non-finally/catch/fault clause.", }) }, + { "System.Net.Http.dll", new Tuple (0, new string [] { + "LLVM failed for 'HttpContent.CopyToAsync': non-finally/catch/fault clause.", + "LLVM failed for 'HttpContent.LoadIntoBufferAsync': non-finally/catch/fault clause.", + "LLVM failed for 'd__47.MoveNext': non-finally/catch/fault clause.", + }) }, { "mscorlib.dll", new Tuple (0, new string [] { "LLVM failed for 'Console.Write': opcode arglist", "LLVM failed for 'Console.WriteLine': opcode arglist", diff --git a/tools/linker/MobileSweepStep.cs b/tools/linker/MobileSweepStep.cs index eb50da1f5ba3..91135ec95eec 100644 --- a/tools/linker/MobileSweepStep.cs +++ b/tools/linker/MobileSweepStep.cs @@ -49,12 +49,12 @@ protected void SweepMainModule (ModuleDefinition main) // or they can point to nothing which will break later (e.g. when re-loading for stripping IL) // reference: https://bugzilla.xamarin.com/show_bug.cgi?id=36577 if (main.HasExportedTypes) - SweepCollectionNonAttributable (main.ExportedTypes); + SweepCollectionMetadata (main.ExportedTypes); // only when linking should we remove module references, if we (re)save the assembly then // the entrypoints (for p/invokes) will be required later // reference: https://bugzilla.xamarin.com/show_bug.cgi?id=35372 if (main.HasModuleReferences && (CurrentAction == AssemblyAction.Link)) - SweepCollectionNonAttributable (main.ModuleReferences); + SweepCollectionMetadata (main.ModuleReferences); } } } diff --git a/tools/mmp/mmp.csproj b/tools/mmp/mmp.csproj index 2922436b0b5f..00a979098d34 100644 --- a/tools/mmp/mmp.csproj +++ b/tools/mmp/mmp.csproj @@ -166,6 +166,9 @@ Linker\XApiReader.cs + + Linker\OutputException.cs + Linker.Steps\BaseStep.cs diff --git a/tools/mtouch/mtouch.csproj b/tools/mtouch/mtouch.csproj index 587927d14162..435ad563ee94 100644 --- a/tools/mtouch/mtouch.csproj +++ b/tools/mtouch/mtouch.csproj @@ -154,6 +154,9 @@ Linker\MethodAction.cs + + Linker\OutputException.cs + Linker.Steps\BaseStep.cs