From 67a88afb5d50baabf497165636b5b6ef5c9e099d Mon Sep 17 00:00:00 2001 From: Jumar Macato <16554748+jmacato@users.noreply.github.com> Date: Fri, 10 Oct 2025 22:54:47 +0800 Subject: [PATCH] Add parent/automationPeer null guards on AvnWindow (#19805) * Add parent/automationPeer null guards on AvnWindow * Add null guards on AvnView --- native/Avalonia.Native/src/OSX/AvnView.mm | 6 +++++- native/Avalonia.Native/src/OSX/AvnWindow.mm | 20 +++++++++++++++----- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/native/Avalonia.Native/src/OSX/AvnView.mm b/native/Avalonia.Native/src/OSX/AvnView.mm index 6fe1c8ceeb..2ff83547a0 100644 --- a/native/Avalonia.Native/src/OSX/AvnView.mm +++ b/native/Avalonia.Native/src/OSX/AvnView.mm @@ -943,7 +943,7 @@ static void ConvertTilt(NSPoint tilt, float* xTilt, float* yTilt) auto window = (AvnWindow*)[self window]; auto peer = [window automationPeer]; - if (!peer->IsRootProvider()) + if (peer == nullptr || !peer->IsRootProvider()) return nil; auto clientPoint = [window convertPointFromScreen:point]; @@ -980,6 +980,10 @@ static void ConvertTilt(NSPoint tilt, float* xTilt, float* yTilt) // of the AvnView. auto window = (AvnWindow*)[self window]; auto peer = [window automationPeer]; + if (peer == nullptr) + { + return; + } auto childPeers = peer->GetChildren(); auto childCount = childPeers != nullptr ? childPeers->GetCount() : 0; diff --git a/native/Avalonia.Native/src/OSX/AvnWindow.mm b/native/Avalonia.Native/src/OSX/AvnWindow.mm index 79fe095731..ea15c792a7 100644 --- a/native/Avalonia.Native/src/OSX/AvnWindow.mm +++ b/native/Avalonia.Native/src/OSX/AvnWindow.mm @@ -605,21 +605,30 @@ - (id _Nullable) accessibilityFocusedUIElement { - if (![self automationPeer]->IsRootProvider()) + auto automationPeer = [self automationPeer]; + if (automationPeer == nullptr || !automationPeer->IsRootProvider()) return nil; - auto focusedPeer = [self automationPeer]->RootProvider_GetFocus(); + + auto focusedPeer = automationPeer->RootProvider_GetFocus(); + if (focusedPeer == nullptr) + return nil; + return [AvnAccessibilityElement acquire:focusedPeer]; } - (NSString * _Nullable) accessibilityIdentifier { - return GetNSStringAndRelease([self automationPeer]->GetAutomationId()); + auto automationPeer = [self automationPeer]; + if (automationPeer == nullptr) + return nil; + + return GetNSStringAndRelease(automationPeer->GetAutomationId()); } - (IAvnAutomationPeer* _Nonnull) automationPeer { auto parent = _parent.tryGet(); - if (_automationPeer == nullptr) + if (parent && _automationPeer == nullptr) { _automationPeer = parent->BaseEvents->GetAutomationPeer(); _automationNode = new AvnAutomationNode(self); @@ -632,7 +641,8 @@ - (void)raiseChildrenChanged { auto parent = _parent.tryGet(); - [parent->View raiseAccessibilityChildrenChanged]; + if(parent) + [parent->View raiseAccessibilityChildrenChanged]; } - (void)raiseFocusChanged