accessibility/inc/extended/accessiblelistboxentry.hxx | 2 + accessibility/source/extended/accessiblelistboxentry.cxx | 28 +++++---------- 2 files changed, 12 insertions(+), 18 deletions(-)
New commits: commit f1dbbfe278c8673d98e2eb3d8ad460b9f7364642 Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Mon Oct 23 12:04:54 2023 +0200 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Mon Oct 23 20:35:52 2023 +0200 a11y: Don't throw exception on valid list box entry action index `checkActionIndex_Impl` was previously throwing an IndexOutOfBoundsException for any index other than 0. The // only three actions comment in there was only adding to the confusion... Convert that helper function to a method of the class and take the actual count of actions into account. Also drop the misleading `ACCESSIBLE_ACTION_COUNT` define altogether, and just return 1 at the only remaining place using it. This fixes a crash seen with the qt6 VCL plugin and Orca running when opening the spelling options dialog ("Tools" -> "Spelling", then press the "Options..." button). 1 __pthread_kill_implementation pthread_kill.c 44 0x7f29908a80fc 2 __pthread_kill_internal pthread_kill.c 78 0x7f29908a815f 3 __GI_raise raise.c 26 0x7f299085a472 4 __GI_abort abort.c 79 0x7f29908444b2 5 ?? 0x7f29904a09db 6 ?? 0x7f29904affaa 7 std::terminate() 0x7f29904b0015 8 __cxa_throw 0x7f29904b0268 9 (anonymous namespace)::checkActionIndex_Impl accessiblelistboxentry.cxx 49 0x7f29562aeb82 10 accessibility::AccessibleListBoxEntry::getAccessibleActionDescription accessiblelistboxentry.cxx 770 0x7f29562b2b9b 11 QtAccessibleWidget::actionNames QtAccessibleWidget.cxx 805 0x7f297c84a8d7 12 QAccessibleBridgeUtils::effectiveActionNames qaccessiblebridgeutils.cpp 25 0x7f297b6c90a5 13 AtSpiAdaptor::actionInterface atspiadaptor.cpp 1862 0x7f297b6e2cc0 14 AtSpiAdaptor::handleMessage atspiadaptor.cpp 1438 0x7f297b6de432 15 QDBusConnectionPrivate::activateObject qdbusintegrator.cpp 1438 0x7f2979ec0ecb 16 QDBusActivateObjectEvent::placeMetaCall qdbusintegrator.cpp 1594 0x7f2979ec1bb0 17 QObject::event qobject.cpp 1446 0x7f297c02116e 18 QApplicationPrivate::notify_helper qapplication.cpp 3295 0x7f297a59d714 19 QApplication::notify qapplication.cpp 3246 0x7f297a59d524 20 QCoreApplication::notifyInternal2 qcoreapplication.cpp 1131 0x7f297bfa23ba 21 QCoreApplication::sendEvent qcoreapplication.cpp 1572 0x7f297bfa2ead 22 QCoreApplicationPrivate::sendPostedEvents qcoreapplication.cpp 1937 0x7f297bfa3ea6 23 QCoreApplication::sendPostedEvents qcoreapplication.cpp 1794 0x7f297bfa37ae 24 postEventSourceDispatch qeventdispatcher_glib.cpp 244 0x7f297c3b9108 25 ?? 0x7f29835111b4 26 ?? 0x7f29835142d7 27 g_main_context_iteration 0x7f29835148f0 28 QEventDispatcherGlib::processEvents qeventdispatcher_glib.cpp 394 0x7f297c3b999d 29 QXcbGlibEventDispatcher::processEvents qxcbeventdispatcher.cpp 96 0x7f2979c67036 30 QtInstance::ImplYield QtInstance.cxx 421 0x7f297c8c27c6 31 QtInstance::DoYield QtInstance.cxx 432 0x7f297c8c28ef 32 ImplYield svapp.cxx 377 0x7f298732dcc8 33 Application::Yield svapp.cxx 461 0x7f298732ea66 34 Application::Execute svapp.cxx 355 0x7f298732d9bb 35 desktop::Desktop::Main app.cxx 1601 0x7f2990a35716 36 ImplSVMain svmain.cxx 204 0x7f298734d600 37 SVMain svmain.cxx 236 0x7f298734d735 38 soffice_main sofficemain.cxx 94 0x7f2990aa058f 39 sal_main main.c 51 0x5629220af9d4 40 main main.c 49 0x5629220af9ba Change-Id: Ib3ed8616fb539942d9ba0cd60d5607859deb5a7b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158344 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> diff --git a/accessibility/inc/extended/accessiblelistboxentry.hxx b/accessibility/inc/extended/accessiblelistboxentry.hxx index 52964a80c4d1..050dc948d9c4 100644 --- a/accessibility/inc/extended/accessiblelistboxentry.hxx +++ b/accessibility/inc/extended/accessiblelistboxentry.hxx @@ -94,6 +94,8 @@ namespace accessibility /// @throws css::lang::DisposedException /// @throws css::uno::RuntimeException tools::Rectangle GetBoundingBoxOnScreen(); + /// @throws css::lang::IndexOutOfBoundsException + void CheckActionIndex(sal_Int32 nIndex); /// @throws css::lang::DisposedException void EnsureIsAlive() const; diff --git a/accessibility/source/extended/accessiblelistboxentry.cxx b/accessibility/source/extended/accessiblelistboxentry.cxx index 1f93476daa6a..69feac418805 100644 --- a/accessibility/source/extended/accessiblelistboxentry.cxx +++ b/accessibility/source/extended/accessiblelistboxentry.cxx @@ -37,20 +37,6 @@ #include <helper/accresmgr.hxx> #include <strings.hrc> -#define ACCESSIBLE_ACTION_COUNT 1 - -namespace -{ - /// @throws css::lang::IndexOutOfBoundsException - void checkActionIndex_Impl( sal_Int32 _nIndex ) - { - if ( _nIndex < 0 || _nIndex >= ACCESSIBLE_ACTION_COUNT ) - // only three actions - throw css::lang::IndexOutOfBoundsException(); - } -} - - namespace accessibility { // class AccessibleListBoxEntry ----------------------------------------------------- @@ -197,6 +183,12 @@ namespace accessibility return GetBoundingBoxOnScreen_Impl(); } + void AccessibleListBoxEntry::CheckActionIndex(sal_Int32 nIndex) + { + if (nIndex < 0 || nIndex >= getAccessibleActionCount()) + throw css::lang::IndexOutOfBoundsException(); + } + void AccessibleListBoxEntry::EnsureIsAlive() const { if ( !IsAlive_Impl() ) @@ -720,7 +712,7 @@ namespace accessibility return 0; } else - return ACCESSIBLE_ACTION_COUNT; + return 1; return 0; } @@ -730,7 +722,7 @@ namespace accessibility ::osl::MutexGuard aGuard( m_aMutex ); bool bRet = false; - checkActionIndex_Impl( nIndex ); + CheckActionIndex(nIndex); EnsureIsAlive(); SvTreeFlags treeFlag = m_pTreeListBox->GetTreeFlags(); @@ -767,7 +759,7 @@ namespace accessibility SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard( m_aMutex ); - checkActionIndex_Impl( nIndex ); + CheckActionIndex(nIndex); EnsureIsAlive(); SvTreeListEntry* pEntry = m_pTreeListBox->GetEntryFromPath( m_aEntryPath ); @@ -803,7 +795,7 @@ namespace accessibility Reference< XAccessibleKeyBinding > AccessibleListBoxEntry::getAccessibleActionKeyBinding( sal_Int32 nIndex ) { Reference< XAccessibleKeyBinding > xRet; - checkActionIndex_Impl( nIndex ); + CheckActionIndex(nIndex); // ... which key? return xRet; }