vcl/source/window/toolbox2.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
New commits: commit ed7ad72ade8a72df2a01018f9d6a7daa328383b9 Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Mar 29 16:43:59 2018 +0200 Make ToolBox::SetItemBits work for disposed instances I happened to come across a SEGV caused by a null ToolBox::mpData once, as below. Interestingly, some ToolBox member functions like GetItemPos and GetItemCount do take a potential null mpData (after a call to dispose) into account. > #0 0x00007fffebc1b93c in std::__cxx1998::vector<ImplToolItem, std::allocator<ImplToolItem> >::size() const (this=0x20) at /usr/include/c++/7/bits/stl_vector.h:671 > #1 0x00007fffebc172ce in ToolBox::SetItemBits(unsigned short, ToolBoxItemBits) (this=0x7ffec6449230, nItemId=16, nBits=ToolBoxItemBits::DROPDOWN) at /data/sbergman/lo-ro/source/vcl/source/window/toolbox2.cxx:889 > #2 0x00007ffff07ccc42 in SvxClipBoardControl::StateChanged(unsigned short, SfxItemState, SfxPoolItem const*) (this=0x7ffec6420390, nSID=5312, eState=SfxItemState::DEFAULT, pState=0xad4cf60) at /data/sbergman/lo-ro/source/svx/source/mnuctrls/clipboardctl.cxx:116 > #3 0x00007ffff1d69c4f in SfxToolBoxControl::statusChanged(com::sun::star::frame::FeatureStateEvent const&) (this=0x7ffec6420390, rEvent=...) at /data/sbergman/lo-ro/source/sfx2/source/toolbox/tbxitem.cxx:521 > #4 0x00007ffff193e163 in SfxDispatchController_Impl::addStatusListener(com::sun::star::uno::Reference<com::sun::star::frame::XStatusListener> const&, com::sun::star::util::URL const&) (this=0xaa3da80, aListener=uno::Reference to (SvxClipBoardControl *) 0x7ffec64203b8, aURL=...) at /data/sbergman/lo-ro/source/sfx2/source/control/unoctitm.cxx:865 > #5 0x00007ffff193ddfc in SfxOfficeDispatch::addStatusListener(com::sun::star::uno::Reference<com::sun::star::frame::XStatusListener> const&, com::sun::star::util::URL const&) (this=0xaffa990, aListener=uno::Reference to (SvxClipBoardControl *) 0x7ffec64203b8, aURL=...) at /data/sbergman/lo-ro/source/sfx2/source/control/unoctitm.cxx:250 > #6 0x00007fffee75c7e4 in svt::ToolboxController::bindListener() (this=0x7ffec6420390) at /data/sbergman/lo-ro/source/svtools/source/uno/toolboxcontroller.cxx:529 > #7 0x00007fffee75c056 in svt::ToolboxController::update() (this=0x7ffec6420390) at /data/sbergman/lo-ro/source/svtools/source/uno/toolboxcontroller.cxx:227 > #8 0x00007fffc11ddef6 in framework::ToolBarManager::UpdateControllers() (this=0x7ffec6142930) at /data/sbergman/lo-ro/source/framework/source/uielement/toolbarmanager.cxx:364 > #9 0x00007fffc11e995e in framework::ToolBarManager::AsyncUpdateControllersHdl(Timer*) (this=0x7ffec6142930) at /data/sbergman/lo-ro/source/framework/source/uielement/toolbarmanager.cxx:1852 > #10 0x00007fffc11dc748 in framework::ToolBarManager::LinkStubAsyncUpdateControllersHdl(void*, Timer*) (instance=0x7ffec6142930, data=0x7ffec6142b00) at /data/sbergman/lo-ro/source/framework/source/uielement/toolbarmanager.cxx:1839 > #11 0x00007fffec264928 in Link<Timer*, void>::Call(Timer*) const (this=0x7ffec6142b20, data=0x7ffec6142b00) at /data/sbergman/lo-ro/source/include/tools/link.hxx:84 > #12 0x00007fffec264787 in Timer::Invoke() (this=0x7ffec6142b00) at /data/sbergman/lo-ro/source/vcl/source/app/timer.cxx:76 > #13 0x00007fffec21cdd2 in Scheduler::ProcessTaskScheduling() () at /data/sbergman/lo-ro/source/vcl/source/app/scheduler.cxx:448 > #14 0x00007fffec21bfed in Scheduler::CallbackTaskScheduling() () at /data/sbergman/lo-ro/source/vcl/source/app/scheduler.cxx:270 > #15 0x00007fffcdfaa036 in SalTimer::CallCallback() (this=0x199ae40) at /data/sbergman/lo-ro/source/vcl/inc/saltimer.hxx:55 > #16 0x00007fffcdfa920d in sal_gtk_timeout_dispatch(_GSource*, int (*)(void*), void*) (pSource=0x7e1abe0) at /data/sbergman/lo-ro/source/vcl/unx/gtk3/gtk3gtkdata.cxx:692 > #17 0x00007ffff5aa7b77 in g_main_dispatch (context=0x63d8d0) at /usr/src/debug/glib2-2.54.3-2.fc27.x86_64/glib/gmain.c:3142 > #18 0x00007ffff5aa7b77 in g_main_context_dispatch (context=context@entry=0x63d8d0) at /usr/src/debug/glib2-2.54.3-2.fc27.x86_64/glib/gmain.c:3795 > #19 0x00007ffff5aa7f20 in g_main_context_iterate (context=context@entry=0x63d8d0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at /usr/src/debug/glib2-2.54.3-2.fc27.x86_64/glib/gmain.c:3868 > #20 0x00007ffff5aa7fac in g_main_context_iteration (context=0x63d8d0, may_block=1) at /usr/src/debug/glib2-2.54.3-2.fc27.x86_64/glib/gmain.c:3929 > #21 0x00007fffcdfa78f4 in GtkSalData::Yield(bool, bool) (this=0x63ae70, bWait=true, bHandleAllCurrentEvents=false) at /data/sbergman/lo-ro/source/vcl/unx/gtk3/gtk3gtkdata.cxx:459 > #22 0x00007fffcdfabf07 in GtkInstance::DoYield(bool, bool) (this=0x6e6a90, bWait=true, bHandleAllCurrentEvents=false) at /data/sbergman/lo-ro/source/vcl/unx/gtk/gtkinst.cxx:412 > #23 0x00007fffec2515ca in ImplYield(bool, bool) (i_bWait=true, i_bAllEvents=false) at /data/sbergman/lo-ro/source/vcl/source/app/svapp.cxx:472 > #24 0x00007fffec24c2c4 in Application::Yield() () at /data/sbergman/lo-ro/source/vcl/source/app/svapp.cxx:537 > #25 0x00007fffec24c24e in Application::Execute() () at /data/sbergman/lo-ro/source/vcl/source/app/svapp.cxx:452 > #26 0x00007ffff774d617 in desktop::Desktop::Main() (this=0x7fffffff2950) at /data/sbergman/lo-ro/source/desktop/source/app/app.cxx:1623 > #27 0x00007fffec260825 in ImplSVMain() () at /data/sbergman/lo-ro/source/vcl/source/app/svmain.cxx:198 > #28 0x00007fffec262498 in SVMain() () at /data/sbergman/lo-ro/source/vcl/source/app/svmain.cxx:236 > #29 0x00007ffff77bba98 in soffice_main() () at /data/sbergman/lo-ro/source/desktop/source/app/sofficemain.cxx:166 > #30 0x000000000040086d in sal_main () at /data/sbergman/lo-ro/source/desktop/source/app/main.c:48 > #31 0x0000000000400847 in main (argc=4, argv=0x7fffffff2c98) at /data/sbergman/lo-ro/source/desktop/source/app/main.c:47 Change-Id: I622b4128de0a6be294b59caf2bb2d6f7b529c349 Reviewed-on: https://gerrit.libreoffice.org/52086 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Stephan Bergmann <sberg...@redhat.com> diff --git a/vcl/source/window/toolbox2.cxx b/vcl/source/window/toolbox2.cxx index d61d8ae6d60d..de0faecfa607 100644 --- a/vcl/source/window/toolbox2.cxx +++ b/vcl/source/window/toolbox2.cxx @@ -886,7 +886,7 @@ void ToolBox::SetItemBits( sal_uInt16 nItemId, ToolBoxItemBits nBits ) { ImplToolItems::size_type nPos = GetItemPos( nItemId ); - if ( nPos < mpData->m_aItems.size() ) + if ( nPos < GetItemCount() ) { ToolBoxItemBits nOldBits = mpData->m_aItems[nPos].mnBits; mpData->m_aItems[nPos].mnBits = nBits; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits