summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Luby <plubius@neooffice.org>2023-01-17 09:51:10 -0500
committerPatrick Luby <plubius@neooffice.org>2023-01-24 16:34:08 +0000
commit7d09f9f54af7081991e37cb828e07cd759aa5d0d (patch)
tree2243c2eb3d943189c72aac2c2e3ecfea97b76990
parentResolves: tdf#153116 null-ptr-deref in get-surrounding-text (diff)
downloadcore-7d09f9f54af7081991e37cb828e07cd759aa5d0d.tar.gz
core-7d09f9f54af7081991e37cb828e07cd759aa5d0d.zip
tdf#148453 Fix crash by turning off optimization for Objective-C selector
The default attributes sequence sometimes crashes when it is released but only when compiler optimization is enabled, so disable optimization for the +[AquaA11yTextAttributesWrapper createAttributedStringForElement] selector. Also, disabling optimization by itself is apparently not enough to stop the crashing. Acquiring the solar mutex during native accessibility calls is also needed. Native accessibility calls are called from native input sources in [NSApp nextEventMatchingMask:untilDate:inMode:dequeue:]. Since AquaSalInstance::DoYield() releases the solar mutex before calling [NSApp nextEventMatchingMask:untilDate:inMode:dequeue:], we need to always acquire the solar mutex during all NSAccessibility selectors (both the old informal protocol and the newer formal protocol) that we implement. Change-Id: I9b715e17e9c5a32b7ce28815e288b2af236c3cc6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145742 Tested-by: Jenkins Reviewed-by: Patrick Luby <plubius@neooffice.org> (cherry picked from commit de1d75a0cd25f239cdc751dec75c9019fbcabd8e) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145813 Tested-by: Patrick Luby <plubius@neooffice.org>
-rw-r--r--vcl/osx/a11ytextattributeswrapper.mm6
-rw-r--r--vcl/osx/a11ywrapper.mm33
-rw-r--r--vcl/osx/a11ywrapperbutton.mm4
-rw-r--r--vcl/osx/a11ywrappercheckbox.mm7
-rw-r--r--vcl/osx/a11ywrappercombobox.mm10
-rw-r--r--vcl/osx/a11ywrappergroup.mm4
-rw-r--r--vcl/osx/a11ywrapperlist.mm4
-rw-r--r--vcl/osx/a11ywrapperradiobutton.mm7
-rw-r--r--vcl/osx/a11ywrapperradiogroup.mm4
-rw-r--r--vcl/osx/a11ywrapperrow.mm4
-rw-r--r--vcl/osx/a11ywrapperscrollarea.mm4
-rw-r--r--vcl/osx/a11ywrapperscrollbar.mm4
-rw-r--r--vcl/osx/a11ywrappersplitter.mm4
-rw-r--r--vcl/osx/a11ywrapperstatictext.mm4
-rw-r--r--vcl/osx/a11ywrappertabgroup.mm4
-rw-r--r--vcl/osx/a11ywrappertextarea.mm4
-rw-r--r--vcl/osx/a11ywrappertoolbar.mm4
17 files changed, 110 insertions, 1 deletions
diff --git a/vcl/osx/a11ytextattributeswrapper.mm b/vcl/osx/a11ytextattributeswrapper.mm
index 84a9b27e54cc..9db1ba91307d 100644
--- a/vcl/osx/a11ytextattributeswrapper.mm
+++ b/vcl/osx/a11ytextattributeswrapper.mm
@@ -300,7 +300,11 @@ using namespace ::com::sun::star::uno;
[AquaA11yTextAttributesWrapper addMarkup:markup withType:css::text::TextMarkupType::SPELLCHECK toString:string inRange:range];
}
-+(NSMutableAttributedString *)createAttributedStringForElement:(AquaA11yWrapper *)wrapper inOrigRange:(id)origRange {
+// tdf#148453 Fix crash by turning off optimization for Objective-C selector
+// The default attributes sequence sometimes crashes when it is released but
+// only when compiler optimization is enabled, so disable optimization for the
+// +[AquaA11yTextAttributesWrapper createAttributedStringForElement] selector.
++(NSMutableAttributedString *)createAttributedStringForElement:(AquaA11yWrapper *)wrapper inOrigRange:(id)origRange __attribute__((optnone)) {
static const Sequence < OUString > emptySequence;
// vars
NSMutableAttributedString * string = nil;
diff --git a/vcl/osx/a11ywrapper.mm b/vcl/osx/a11ywrapper.mm
index beb40f8851b3..73abb6050733 100644
--- a/vcl/osx/a11ywrapper.mm
+++ b/vcl/osx/a11ywrapper.mm
@@ -682,6 +682,9 @@ static std::ostream &operator<<(std::ostream &s, NSObject *obj) {
#pragma mark Accessibility Protocol
-(id)accessibilityAttributeValue:(NSString *)attribute {
+ // Related: tdf#148453 Acquire solar mutex during native accessibility calls
+ SolarMutexGuard aGuard;
+
SAL_INFO("vcl.a11y", "[" << self << " accessibilityAttributeValue:" << attribute << "]");
// #i90575# guard NSAccessibility protocol against unwanted access
if ( isPopupMenuOpen ) {
@@ -712,6 +715,9 @@ static std::ostream &operator<<(std::ostream &s, NSObject *obj) {
}
-(BOOL)accessibilityIsIgnored {
+ // Related: tdf#148453 Acquire solar mutex during native accessibility calls
+ SolarMutexGuard aGuard;
+
SAL_INFO("vcl.a11y", "[" << self << " accessibilityIsIgnored]");
// #i90575# guard NSAccessibility protocol against unwanted access
if ( isPopupMenuOpen ) {
@@ -736,6 +742,9 @@ static std::ostream &operator<<(std::ostream &s, NSObject *obj) {
}
-(NSArray *)accessibilityAttributeNames {
+ // Related: tdf#148453 Acquire solar mutex during native accessibility calls
+ SolarMutexGuard aGuard;
+
SAL_INFO("vcl.a11y", "[" << self << " accessibilityAttributeNames]");
// #i90575# guard NSAccessibility protocol against unwanted access
if ( isPopupMenuOpen ) {
@@ -817,6 +826,9 @@ static std::ostream &operator<<(std::ostream &s, NSObject *obj) {
}
-(BOOL)accessibilityIsAttributeSettable:(NSString *)attribute {
+ // Related: tdf#148453 Acquire solar mutex during native accessibility calls
+ SolarMutexGuard aGuard;
+
SAL_INFO("vcl.a11y", "[" << self << " accessibilityAttributeIsSettable:" << attribute << "]");
bool isSettable = false;
if ( [ self accessibleText ] ) {
@@ -835,6 +847,9 @@ static std::ostream &operator<<(std::ostream &s, NSObject *obj) {
}
-(NSArray *)accessibilityParameterizedAttributeNames {
+ // Related: tdf#148453 Acquire solar mutex during native accessibility calls
+ SolarMutexGuard aGuard;
+
SAL_INFO("vcl.a11y", "[" << self << " accessibilityParameterizedAttributeNames]");
NSMutableArray * attributeNames = [ [ NSMutableArray alloc ] init ];
// Special Attributes depending on interface
@@ -845,6 +860,9 @@ static std::ostream &operator<<(std::ostream &s, NSObject *obj) {
}
-(id)accessibilityAttributeValue:(NSString *)attribute forParameter:(id)parameter {
+ // Related: tdf#148453 Acquire solar mutex during native accessibility calls
+ SolarMutexGuard aGuard;
+
SAL_INFO("vcl.a11y", "[" << self << " accessibilityAttributeValue:" << attribute << " forParameter:" << (static_cast<NSObject*>(parameter)) << "]");
SEL methodSelector = [ self selectorForAttribute: attribute asGetter: YES withGetterParameter: YES ];
if ( [ self respondsToSelector: methodSelector ] ) {
@@ -860,6 +878,9 @@ static std::ostream &operator<<(std::ostream &s, NSObject *obj) {
}
-(void)accessibilitySetValue:(id)value forAttribute:(NSString *)attribute {
+ // Related: tdf#148453 Acquire solar mutex during native accessibility calls
+ SolarMutexGuard aGuard;
+
SAL_INFO("vcl.a11y", "[" << self << " accessibilitySetValue:" << (static_cast<NSObject*>(value)) << " forAttribute:" << attribute << "]");
SEL methodSelector = [ self selectorForAttribute: attribute asGetter: NO withGetterParameter: NO ];
if ( [ AquaA11yComponentWrapper respondsToSelector: methodSelector ] ) {
@@ -877,6 +898,9 @@ static std::ostream &operator<<(std::ostream &s, NSObject *obj) {
}
-(id)accessibilityFocusedUIElement {
+ // Related: tdf#148453 Acquire solar mutex during native accessibility calls
+ SolarMutexGuard aGuard;
+
SAL_INFO("vcl.a11y", "[" << self << " accessibilityFocusedUIElement]");
// #i90575# guard NSAccessibility protocol against unwanted access
if ( isPopupMenuOpen ) {
@@ -937,6 +961,9 @@ static std::ostream &operator<<(std::ostream &s, NSObject *obj) {
}
-(void)accessibilityPerformAction:(NSString *)action {
+ // Related: tdf#148453 Acquire solar mutex during native accessibility calls
+ SolarMutexGuard aGuard;
+
SAL_INFO("vcl.a11y", "[" << self << " accessibilityPerformAction:" << action << "]");
AquaA11yWrapper * actionResponder = [ self actionResponder ];
if ( actionResponder ) {
@@ -945,6 +972,9 @@ static std::ostream &operator<<(std::ostream &s, NSObject *obj) {
}
-(NSArray *)accessibilityActionNames {
+ // Related: tdf#148453 Acquire solar mutex during native accessibility calls
+ SolarMutexGuard aGuard;
+
SAL_INFO("vcl.a11y", "[" << self << " accessibilityActionNames]");
NSArray * actionNames = nil;
AquaA11yWrapper * actionResponder = [ self actionResponder ];
@@ -1030,6 +1060,9 @@ static Reference < XAccessibleContext > hitTestRunner ( css::awt::Point point,
}
-(id)accessibilityHitTest:(NSPoint)point {
+ // Related: tdf#148453 Acquire solar mutex during native accessibility calls
+ SolarMutexGuard aGuard;
+
SAL_INFO("vcl.a11y", "[" << self << " accessibilityHitTest:" << point << "]");
static id wrapper = nil;
if ( nil != wrapper ) {
diff --git a/vcl/osx/a11ywrapperbutton.mm b/vcl/osx/a11ywrapperbutton.mm
index ca5f16af3d42..a2c0d0398fe9 100644
--- a/vcl/osx/a11ywrapperbutton.mm
+++ b/vcl/osx/a11ywrapperbutton.mm
@@ -18,6 +18,7 @@
*/
+#include <vcl/svapp.hxx>
#include <osx/salinst.h>
#include "a11ywrapperbutton.h"
@@ -36,6 +37,9 @@
}
-(NSArray *)accessibilityAttributeNames {
+ // Related: tdf#148453 Acquire solar mutex during native accessibility calls
+ SolarMutexGuard aGuard;
+
// Default Attributes
NSMutableArray * attributeNames = [ NSMutableArray arrayWithArray: [ super accessibilityAttributeNames ] ];
// Special Attributes and removing unwanted attributes depending on role
diff --git a/vcl/osx/a11ywrappercheckbox.mm b/vcl/osx/a11ywrappercheckbox.mm
index d67c5b610ded..9e0f221985c9 100644
--- a/vcl/osx/a11ywrappercheckbox.mm
+++ b/vcl/osx/a11ywrappercheckbox.mm
@@ -18,6 +18,7 @@
*/
+#include <vcl/svapp.hxx>
#include <osx/salinst.h>
#include "a11ywrappercheckbox.h"
@@ -36,6 +37,9 @@
}
-(BOOL)accessibilityIsAttributeSettable:(NSString *)attribute {
+ // Related: tdf#148453 Acquire solar mutex during native accessibility calls
+ SolarMutexGuard aGuard;
+
if ( [ attribute isEqualToString: NSAccessibilityValueAttribute ] ) {
return NO;
}
@@ -43,6 +47,9 @@
}
-(NSArray *)accessibilityAttributeNames {
+ // Related: tdf#148453 Acquire solar mutex during native accessibility calls
+ SolarMutexGuard aGuard;
+
// Default Attributes
NSMutableArray * attributeNames = [ NSMutableArray arrayWithArray: [ super accessibilityAttributeNames ] ];
// Remove text-specific attributes
diff --git a/vcl/osx/a11ywrappercombobox.mm b/vcl/osx/a11ywrappercombobox.mm
index 962a66914863..bfcef7275e33 100644
--- a/vcl/osx/a11ywrappercombobox.mm
+++ b/vcl/osx/a11ywrappercombobox.mm
@@ -18,6 +18,7 @@
*/
+#include <vcl/svapp.hxx>
#include <osx/salinst.h>
#include "a11ywrappercombobox.h"
@@ -110,6 +111,9 @@ using namespace ::com::sun::star::uno;
#pragma mark Accessibility Protocol
-(BOOL)accessibilityIsAttributeSettable:(NSString *)attribute {
+ // Related: tdf#148453 Acquire solar mutex during native accessibility calls
+ SolarMutexGuard aGuard;
+
if ( [ self textArea ] != nil && (
[ attribute isEqualToString: NSAccessibilitySelectedTextAttribute ]
|| [ attribute isEqualToString: NSAccessibilitySelectedTextRangeAttribute ]
@@ -120,6 +124,9 @@ using namespace ::com::sun::star::uno;
}
-(void)accessibilitySetValue:(id)value forAttribute:(NSString *)attribute {
+ // Related: tdf#148453 Acquire solar mutex during native accessibility calls
+ SolarMutexGuard aGuard;
+
if ( [ self textArea ] != nil && (
[ attribute isEqualToString: NSAccessibilitySelectedTextAttribute ]
|| [ attribute isEqualToString: NSAccessibilitySelectedTextRangeAttribute ]
@@ -130,6 +137,9 @@ using namespace ::com::sun::star::uno;
}
-(NSArray *)accessibilityAttributeNames {
+ // Related: tdf#148453 Acquire solar mutex during native accessibility calls
+ SolarMutexGuard aGuard;
+
// Default Attributes
NSMutableArray * attributeNames = [ NSMutableArray arrayWithArray: [ super accessibilityAttributeNames ] ];
// Special Attributes and removing unwanted attributes depending on role
diff --git a/vcl/osx/a11ywrappergroup.mm b/vcl/osx/a11ywrappergroup.mm
index 39cbd9adfcbc..7ed70d47baba 100644
--- a/vcl/osx/a11ywrappergroup.mm
+++ b/vcl/osx/a11ywrappergroup.mm
@@ -18,6 +18,7 @@
*/
+#include <vcl/svapp.hxx>
#include <osx/salinst.h>
#include "a11ywrappergroup.h"
@@ -30,6 +31,9 @@
}
-(NSArray *)accessibilityAttributeNames {
+ // Related: tdf#148453 Acquire solar mutex during native accessibility calls
+ SolarMutexGuard aGuard;
+
// Default Attributes
NSMutableArray * attributeNames = [ NSMutableArray arrayWithArray: [ super accessibilityAttributeNames ] ];
// Special Attributes and removing unwanted attributes depending on role
diff --git a/vcl/osx/a11ywrapperlist.mm b/vcl/osx/a11ywrapperlist.mm
index 9b0bac733bf9..25b3fa37ac62 100644
--- a/vcl/osx/a11ywrapperlist.mm
+++ b/vcl/osx/a11ywrapperlist.mm
@@ -18,6 +18,7 @@
*/
+#include <vcl/svapp.hxx>
#include <osx/salinst.h>
#include "a11ywrapperlist.h"
@@ -28,6 +29,9 @@ using namespace ::com::sun::star::accessibility;
@implementation AquaA11yWrapperList : AquaA11yWrapper
-(NSArray *)accessibilityAttributeNames {
+ // Related: tdf#148453 Acquire solar mutex during native accessibility calls
+ SolarMutexGuard aGuard;
+
// Default Attributes
NSMutableArray * attributeNames = [ NSMutableArray arrayWithArray: [ super accessibilityAttributeNames ] ];
// Special Attributes and removing unwanted attributes depending on role
diff --git a/vcl/osx/a11ywrapperradiobutton.mm b/vcl/osx/a11ywrapperradiobutton.mm
index 21fd9529bb96..5022cc18c22b 100644
--- a/vcl/osx/a11ywrapperradiobutton.mm
+++ b/vcl/osx/a11ywrapperradiobutton.mm
@@ -18,6 +18,7 @@
*/
+#include <vcl/svapp.hxx>
#include <osx/salinst.h>
#include "a11ywrapperradiobutton.h"
#include "a11ytextwrapper.h"
@@ -35,6 +36,9 @@
}
-(BOOL)accessibilityIsAttributeSettable:(NSString *)attribute {
+ // Related: tdf#148453 Acquire solar mutex during native accessibility calls
+ SolarMutexGuard aGuard;
+
if ( [ attribute isEqualToString: NSAccessibilityValueAttribute ] ) {
return NO;
}
@@ -42,6 +46,9 @@
}
-(NSArray *)accessibilityAttributeNames {
+ // Related: tdf#148453 Acquire solar mutex during native accessibility calls
+ SolarMutexGuard aGuard;
+
// Default Attributes
NSMutableArray * attributeNames = [ NSMutableArray arrayWithArray: [ super accessibilityAttributeNames ] ];
// Special Attributes and removing unwanted attributes depending on role
diff --git a/vcl/osx/a11ywrapperradiogroup.mm b/vcl/osx/a11ywrapperradiogroup.mm
index 557e0b1bca15..9768dbbb6988 100644
--- a/vcl/osx/a11ywrapperradiogroup.mm
+++ b/vcl/osx/a11ywrapperradiogroup.mm
@@ -18,6 +18,7 @@
*/
+#include <vcl/svapp.hxx>
#include <osx/salinst.h>
#include "a11ywrapperradiogroup.h"
#include "a11ytextwrapper.h"
@@ -27,6 +28,9 @@
@implementation AquaA11yWrapperRadioGroup : AquaA11yWrapper
-(NSArray *)accessibilityAttributeNames {
+ // Related: tdf#148453 Acquire solar mutex during native accessibility calls
+ SolarMutexGuard aGuard;
+
// Default Attributes
NSMutableArray * attributeNames = [ NSMutableArray arrayWithArray: [ super accessibilityAttributeNames ] ];
// Special Attributes and removing unwanted attributes depending on role
diff --git a/vcl/osx/a11ywrapperrow.mm b/vcl/osx/a11ywrapperrow.mm
index 1b7ee56dd456..0c140c82c62c 100644
--- a/vcl/osx/a11ywrapperrow.mm
+++ b/vcl/osx/a11ywrapperrow.mm
@@ -18,6 +18,7 @@
*/
+#include <vcl/svapp.hxx>
#include <osx/salinst.h>
#include "a11ywrapperrow.h"
@@ -33,6 +34,9 @@
}
-(NSArray *)accessibilityAttributeNames {
+ // Related: tdf#148453 Acquire solar mutex during native accessibility calls
+ SolarMutexGuard aGuard;
+
// Default Attributes
NSMutableArray * attributeNames = [ NSMutableArray arrayWithArray: [ super accessibilityAttributeNames ] ];
// Special Attributes and removing unwanted attributes depending on role
diff --git a/vcl/osx/a11ywrapperscrollarea.mm b/vcl/osx/a11ywrapperscrollarea.mm
index b0b963a6b403..22037220d409 100644
--- a/vcl/osx/a11ywrapperscrollarea.mm
+++ b/vcl/osx/a11ywrapperscrollarea.mm
@@ -18,6 +18,7 @@
*/
+#include <vcl/svapp.hxx>
#include <osx/salinst.h>
#include "a11ywrapperscrollarea.h"
@@ -59,6 +60,9 @@
}
-(NSArray *)accessibilityAttributeNames {
+ // Related: tdf#148453 Acquire solar mutex during native accessibility calls
+ SolarMutexGuard aGuard;
+
// Default Attributes
NSMutableArray * attributeNames = [ NSMutableArray arrayWithArray: [ super accessibilityAttributeNames ] ];
// Special Attributes and removing unwanted attributes depending on role
diff --git a/vcl/osx/a11ywrapperscrollbar.mm b/vcl/osx/a11ywrapperscrollbar.mm
index a4b7a246b411..4a4612d3bbd0 100644
--- a/vcl/osx/a11ywrapperscrollbar.mm
+++ b/vcl/osx/a11ywrapperscrollbar.mm
@@ -18,6 +18,7 @@
*/
+#include <vcl/svapp.hxx>
#include <osx/salinst.h>
#include "a11ywrapperscrollbar.h"
@@ -31,6 +32,9 @@ using namespace ::com::sun::star::accessibility;
@implementation AquaA11yWrapperScrollBar : AquaA11yWrapper
-(NSArray *)accessibilityAttributeNames {
+ // Related: tdf#148453 Acquire solar mutex during native accessibility calls
+ SolarMutexGuard aGuard;
+
// Default Attributes
NSMutableArray * attributeNames = [ NSMutableArray arrayWithArray: [ super accessibilityAttributeNames ] ];
// Special Attributes and removing unwanted attributes depending on role
diff --git a/vcl/osx/a11ywrappersplitter.mm b/vcl/osx/a11ywrappersplitter.mm
index b43928bd43cd..39ec496af2ac 100644
--- a/vcl/osx/a11ywrappersplitter.mm
+++ b/vcl/osx/a11ywrappersplitter.mm
@@ -18,6 +18,7 @@
*/
+#include <vcl/svapp.hxx>
#include <osx/salinst.h>
#include "a11ywrappersplitter.h"
@@ -28,6 +29,9 @@ using namespace ::com::sun::star::accessibility;
@implementation AquaA11yWrapperSplitter : AquaA11yWrapper
-(NSArray *)accessibilityAttributeNames {
+ // Related: tdf#148453 Acquire solar mutex during native accessibility calls
+ SolarMutexGuard aGuard;
+
// Default Attributes
NSMutableArray * attributeNames = [ NSMutableArray arrayWithArray: [ super accessibilityAttributeNames ] ];
// Special Attributes and removing unwanted attributes depending on role
diff --git a/vcl/osx/a11ywrapperstatictext.mm b/vcl/osx/a11ywrapperstatictext.mm
index cd4728544c00..114c4179e8d6 100644
--- a/vcl/osx/a11ywrapperstatictext.mm
+++ b/vcl/osx/a11ywrapperstatictext.mm
@@ -18,6 +18,7 @@
*/
+#include <vcl/svapp.hxx>
#include <osx/salinst.h>
#include "a11ywrapperstatictext.h"
@@ -34,6 +35,9 @@
}
-(NSArray *)accessibilityAttributeNames {
+ // Related: tdf#148453 Acquire solar mutex during native accessibility calls
+ SolarMutexGuard aGuard;
+
// Default Attributes
NSMutableArray * attributeNames = [ NSMutableArray arrayWithArray: [ super accessibilityAttributeNames ] ];
// Special Attributes and removing unwanted attributes depending on role
diff --git a/vcl/osx/a11ywrappertabgroup.mm b/vcl/osx/a11ywrappertabgroup.mm
index ad5971865449..3d32ccc041f0 100644
--- a/vcl/osx/a11ywrappertabgroup.mm
+++ b/vcl/osx/a11ywrappertabgroup.mm
@@ -18,6 +18,7 @@
*/
+#include <vcl/svapp.hxx>
#include <osx/salinst.h>
#include "a11ywrappertabgroup.h"
@@ -26,6 +27,9 @@
@implementation AquaA11yWrapperTabGroup : AquaA11yWrapper
-(NSArray *)accessibilityAttributeNames {
+ // Related: tdf#148453 Acquire solar mutex during native accessibility calls
+ SolarMutexGuard aGuard;
+
// Default Attributes
NSMutableArray * attributeNames = [ NSMutableArray arrayWithArray: [ super accessibilityAttributeNames ] ];
// Special Attributes and removing unwanted attributes depending on role
diff --git a/vcl/osx/a11ywrappertextarea.mm b/vcl/osx/a11ywrappertextarea.mm
index 3f51f3541bd1..354030fb9aef 100644
--- a/vcl/osx/a11ywrappertextarea.mm
+++ b/vcl/osx/a11ywrappertextarea.mm
@@ -18,6 +18,7 @@
*/
+#include <vcl/svapp.hxx>
#include <osx/salinst.h>
#include "a11ywrappertextarea.h"
@@ -26,6 +27,9 @@
@implementation AquaA11yWrapperTextArea : AquaA11yWrapper
-(NSArray *)accessibilityAttributeNames {
+ // Related: tdf#148453 Acquire solar mutex during native accessibility calls
+ SolarMutexGuard aGuard;
+
// Default Attributes
NSMutableArray * attributeNames = [ NSMutableArray arrayWithArray: [ super accessibilityAttributeNames ] ];
// Special Attributes and removing unwanted attributes depending on role
diff --git a/vcl/osx/a11ywrappertoolbar.mm b/vcl/osx/a11ywrappertoolbar.mm
index 05e9b30e255e..28b5d01328f0 100644
--- a/vcl/osx/a11ywrappertoolbar.mm
+++ b/vcl/osx/a11ywrappertoolbar.mm
@@ -18,6 +18,7 @@
*/
+#include <vcl/svapp.hxx>
#include <osx/salinst.h>
#include "a11ywrappertoolbar.h"
@@ -26,6 +27,9 @@
@implementation AquaA11yWrapperToolbar : AquaA11yWrapper
-(NSArray *)accessibilityAttributeNames {
+ // Related: tdf#148453 Acquire solar mutex during native accessibility calls
+ SolarMutexGuard aGuard;
+
// Default Attributes
NSMutableArray * attributeNames = [ NSMutableArray arrayWithArray: [ super accessibilityAttributeNames ] ];
// Special Attributes and removing unwanted attributes depending on role