From d11f5f314f014970038530cda8f81ae6a6683344 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Mon, 5 Feb 2024 21:11:28 +0000 Subject: [PATCH] fix macos crash at startup by not parsing all app arguments into uris. (#14494) --- native/Avalonia.Native/src/OSX/app.mm | 2 +- .../AvaloniaNativeApplicationPlatform.cs | 11 ++++++++++- src/Avalonia.Native/avn.idl | 3 ++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/native/Avalonia.Native/src/OSX/app.mm b/native/Avalonia.Native/src/OSX/app.mm index 7630de1d0b..d3d3d938e9 100644 --- a/native/Avalonia.Native/src/OSX/app.mm +++ b/native/Avalonia.Native/src/OSX/app.mm @@ -70,7 +70,7 @@ ComPtr _events; { auto array = CreateAvnStringArray(urls); - _events->FilesOpened(array); + _events->UrlsOpened(array); } - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender diff --git a/src/Avalonia.Native/AvaloniaNativeApplicationPlatform.cs b/src/Avalonia.Native/AvaloniaNativeApplicationPlatform.cs index 3365da7d36..212088d4cd 100644 --- a/src/Avalonia.Native/AvaloniaNativeApplicationPlatform.cs +++ b/src/Avalonia.Native/AvaloniaNativeApplicationPlatform.cs @@ -13,12 +13,21 @@ namespace Avalonia.Native void IAvnApplicationEvents.FilesOpened(IAvnStringArray urls) { ((IApplicationPlatformEvents)Application.Current).RaiseUrlsOpened(urls.ToStringArray()); + } + + void IAvnApplicationEvents.UrlsOpened(IAvnStringArray urls) + { + // Raise the urls opened event to be compatible with legacy behavior. + ((IApplicationPlatformEvents)Application.Current).RaiseUrlsOpened(urls.ToStringArray()); if (Application.Current?.ApplicationLifetime is MacOSClassicDesktopStyleApplicationLifetime lifetime) { foreach (var url in urls.ToStringArray()) { - lifetime.RaiseUrl(new Uri(url)); + if (Uri.TryCreate(url, UriKind.RelativeOrAbsolute, out var uri)) + { + lifetime.RaiseUrl(uri); + } } } } diff --git a/src/Avalonia.Native/avn.idl b/src/Avalonia.Native/avn.idl index 2219640f8e..39648265ed 100644 --- a/src/Avalonia.Native/avn.idl +++ b/src/Avalonia.Native/avn.idl @@ -1084,7 +1084,8 @@ interface IAvnNativeControlHostTopLevelAttachment : IUnknown [uuid(6575b5af-f27a-4609-866c-f1f014c20f79)] interface IAvnApplicationEvents : IUnknown { - void FilesOpened (IAvnStringArray* urls); + void FilesOpened (IAvnStringArray* args); + void UrlsOpened (IAvnStringArray* urls); bool TryShutdown(); void OnReopen (); void OnHide ();