[Libreoffice-commits] core.git: svx/source

Miklos Vajna (via logerrit) logerrit at kemper.freedesktop.org
Fri Jan 3 17:34:54 UTC 2020


 svx/source/sidebar/possize/PosSizePropertyPanel.cxx |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

New commits:
commit 4ace93b8295c13907c7ef649b125f049332853e1
Author:     Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Fri Jan 3 14:54:22 2020 +0100
Commit:     Miklos Vajna <vmiklos at collabora.com>
CommitDate: Fri Jan 3 18:34:21 2020 +0100

    svx: fix heap-use-after-free in PosSizePropertyPanel
    
    How to reproduce: start Draw, add a shape, expand the "position and
    size" property panel on the sidebar, quit -> boom
    
    Asan reports:
    
    ==27725==ERROR: AddressSanitizer: heap-use-after-free on address 0x616000aa60c0 at pc 0x0000004a5d34 bp 0x7ffd28584a30 sp 0x7ffd285841e0
    WRITE of size 40 at 0x616000aa60c0 thread T0
        #0 0x4a5d33 in __asan_memcpy lode/packages/llvm-472c6ef8b0f53061b049039f9775ab127beafbe4.src/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cc:22
        #1 0x7f18a3b304c7 in weld::Toolbar::connect_clicked(Link<rtl::OString const&, void> const&) /include/vcl/weld.hxx:1990:81
        #2 0x7f18a3b2fece in ToolbarUnoDispatcher::dispose() /sfx2/source/toolbox/weldutils.cxx:129:17
        #3 0x7f18a3b30144 in ToolbarUnoDispatcher::~ToolbarUnoDispatcher() /sfx2/source/toolbox/weldutils.cxx:133:49
        #4 0x7f189b921f95 in std::default_delete<ToolbarUnoDispatcher>::operator()(ToolbarUnoDispatcher*) const lode/opt_private/gcc-7.3.0/lib64/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/unique_ptr.h:78:2
        #5 0x7f189b91adf9 in std::unique_ptr<ToolbarUnoDispatcher, std::default_delete<ToolbarUnoDispatcher> >::reset(ToolbarUnoDispatcher*) lode/opt_private/gcc-7.3.0/lib64/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/unique_ptr.h:376:4
        #6 0x7f189b8ef552 in svx::sidebar::PosSizePropertyPanel::dispose() /svx/source/sidebar/possize/PosSizePropertyPanel.cxx:149:23
    
    ...
    
    freed by thread T0 here:
        #0 0x4eb440 in operator delete(void*) lode/packages/llvm-472c6ef8b0f53061b049039f9775ab127beafbe4.src/compiler-rt/lib/asan/asan_new_delete.cc:166
        #1 0x7f18806064f0 in (anonymous namespace)::SalInstanceToolbar::~SalInstanceToolbar() /vcl/source/app/salvtables.cxx:1123:5
        #2 0x7f189ac45321 in std::default_delete<weld::Toolbar>::operator()(weld::Toolbar*) const lode/opt_private/gcc-7.3.0/lib64/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/unique_ptr.h:78:2
        #3 0x7f189b91b0e9 in std::unique_ptr<weld::Toolbar, std::default_delete<weld::Toolbar> >::reset(weld::Toolbar*) lode/opt_private/gcc-7.3.0/lib64/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/unique_ptr.h:376:4
        #4 0x7f189b8ef46d in svx::sidebar::PosSizePropertyPanel::dispose() /svx/source/sidebar/possize/PosSizePropertyPanel.cxx:148:18
    
    I.e. it's important to delete mxArrangeDispatch before mxArrangeTbx,
    since the dispatch has a reference to the toolbox.
    
    Change-Id: Ief294b492bc3778b0d39650a5642d21fa1db66f0
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/86177
    Reviewed-by: Miklos Vajna <vmiklos at collabora.com>
    Tested-by: Jenkins

diff --git a/svx/source/sidebar/possize/PosSizePropertyPanel.cxx b/svx/source/sidebar/possize/PosSizePropertyPanel.cxx
index 625769a28f84..681a6db6284c 100644
--- a/svx/source/sidebar/possize/PosSizePropertyPanel.cxx
+++ b/svx/source/sidebar/possize/PosSizePropertyPanel.cxx
@@ -144,8 +144,8 @@ void PosSizePropertyPanel::dispose()
     mxFtFlip.reset();
     mxFlipDispatch.reset();
     mxFlipTbx.reset();
-    mxArrangeTbx.reset();
     mxArrangeDispatch.reset();
+    mxArrangeTbx.reset();
     mxBtnEditChart.reset();
 
     maTransfPosXControl.dispose();


More information about the Libreoffice-commits mailing list