sd/source/ui/unoidl/unomodel.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
New commits: commit 26d32a845913d7168b93f395358cb4b9d26713f5 Author: Caolán McNamara <caolan.mcnam...@collabora.com> AuthorDate: Tue Jul 1 20:36:18 2025 +0100 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Fri Jul 11 07:29:02 2025 +0200 use-after-free on deleted ViewShell #0 0x00007eef974b992d in __dynamic_cast () from /lib/x86_64-linux-gnu/libstdc++.so.6 #1 0x00007eef83ffb326 in SdXImpressDocument::GetViewShell (this=this@entry=0x5511adc0) at sd/source/ui/unoidl/unomodel.cxx:3848 #2 0x00007eef83ffb6dc in SdXImpressDocument::setClipboard (this=0x5511adc0, xClipboard=...) at sd/source/ui/unoidl/unomodel.cxx:4457 #3 0x00007eef9336a4f8 in (anonymous namespace)::forceSetClipboardForCurrentView (pThis=<optimized out>) at desktop/source/lib/init.cxx:1379 3848 DrawViewShell* pViewSh = dynamic_cast<DrawViewShell*>(mpDocShell->GetViewShell()); (gdb) print mbDisposed $1 = true an earlier sanitizer trace is: program/../program/libsdlo.so sd::DrawDocShell::GetViewShell() libreoffice/sd/source/ui/inc/DrawDocShell.hxx:109 program/../program/libsdlo.so SdXImpressDocument::GetViewShell() libreoffice/sd/source/ui/unoidl/unomodel.cxx:3105 program/../program/libsdlo.so SdXImpressDocument::setClipboard(com::sun::star::uno::Reference<com::sun::star::datatransfer::clipboard::XClipboard> const&) libreoffice/sd/source/ui/unoidl/unomodel.cxx:3676 program/libmergedlo.so (anonymous namespace)::forceSetClipboardForCurrentView(_LibreOfficeKitDocument*) libreoffice/desktop/source/lib/init.cxx:1324 program/libmergedlo.so doc_createViewWithOptions(_LibreOfficeKitDocument*, char const*) libreoffice/desktop/source/lib/init.cxx:6895 /usr/bin/coolforkit lok::Document::createView(char const*) libreoffice/include/LibreOfficeKit/LibreOfficeKit.hxx:549 /usr/bin/coolforkit Document::load(std::shared_ptr<ChildSession> const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) kit/Kit.cpp:1912 /usr/bin/coolforkit Document::onLoad(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) kit/Kit.cpp:1230 /usr/bin/coolforkit ChildSession::loadDocument(StringVector const&) kit/ChildSession.cpp:905 /usr/bin/coolforkit ChildSession::_handleInput(char const*, int) kit/ChildSession.cpp:297 /usr/bin/coolforkit Session::handleMessage(std::vector<char, std::allocator<char> > const&) common/Session.cpp:288 /usr/bin/coolforkit Document::forwardToChild(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<char, std::allocator<char> > const&) kit/Kit.cpp:2048 /usr/bin/coolforkit Document::drainQueue() kit/Kit.cpp:2271 /usr/bin/coolforkit KitSocketPoll::drainQueue() kit/Kit.cpp:2668 /usr/bin/coolforkit KitSocketPoll::kitPoll(int) kit/Kit.cpp:2747 /usr/bin/coolforkit pollCallback(void*, int) kit/Kit.cpp:2838 program/libmergedlo.so SvpSalInstance::ImplYield(bool, bool) libreoffice/vcl/headless/svpinst.cxx:430 program/libmergedlo.so SvpSalInstance::DoYield(bool, bool) libreoffice/vcl/headless/svpinst.cxx:471 program/libmergedlo.so ImplYield(bool, bool) libreoffice/vcl/source/app/svapp.cxx:396 program/libmergedlo.so Application::Yield() libreoffice/vcl/source/app/svapp.cxx:480 program/libmergedlo.so Application::Execute() libreoffice/vcl/source/app/svapp.cxx:374 program/libmergedlo.so desktop::Desktop::Main() libreoffice/desktop/source/app/app.cxx:1605 program/libmergedlo.so ImplSVMain() libreoffice/vcl/source/app/svmain.cxx:229 program/libmergedlo.so soffice_main libreoffice/desktop/source/app/sofficemain.cxx:94 program/libmergedlo.so lo_runLoop(_LibreOfficeKit*, int (*)(void*, int), void (*)(void*), void*) libreoffice/desktop/source/lib/init.cxx:7735 /usr/bin/coolforkit lok::Office::runLoop(int (*)(void*, int), void (*)(void*), void*) libreoffice/include/LibreOfficeKit/LibreOfficeKit.hxx:1128 /usr/bin/coolforkit lokit_main(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool, bool, bool, bool, bool, unsigned long) kit/Kit.cpp:3495 /usr/bin/coolforkit createLibreOfficeKit(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool) kit/ForKit.cpp:450 /usr/bin/coolforkit forkLibreOfficeKit(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) kit/ForKit.cpp:500 /usr/bin/coolforkit forkit_main(int, char**) kit/ForKit.cpp:876 /usr/bin/coolforkit main kit/forkit-main.cpp:19 /lib64/libc.so.6 __libc_start_main ??:? /usr/bin/coolforkit _start ??:? freed by thread T0 (kitbroker_011) here: /usr/bin/coolforkit operator delete(void*, unsigned long) /home/collabora/lode/packages/llvm-llvmorg-12.0.1.src/compiler-rt/lib/asan/asan_new_delete.cpp:172 (discriminator 5) program/libmergedlo.so SfxViewFrame::ReleaseObjectShell_Impl() libreoffice/sfx2/source/view/viewfrm.cxx:1167 program/libmergedlo.so ~SfxViewFrame libreoffice/sfx2/source/view/viewfrm.cxx:1977 program/libmergedlo.so SfxViewFrame::Close() libreoffice/sfx2/source/view/viewfrm.cxx:1189 program/libmergedlo.so SfxFrame::DoClose_Impl() libreoffice/sfx2/source/view/frame.cxx:138 Change-Id: Iec746b4473a20ba9c6b5e338f64f9f2380e2db13 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/187258 Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com> Tested-by: Jenkins (cherry picked from commit 5de2f6822a06a92216b65cf241116404733f88ca) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/187273 Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> (cherry picked from commit f22f14aeb7f82cf3a7c3eb8b42f58fd99b3347e0) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/187317 Reviewed-by: Ilmari Lauhakangas <ilmari.lauhakan...@libreoffice.org> Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> Tested-by: Michael Weghorn <m.wegh...@posteo.de> diff --git a/sd/source/ui/unoidl/unomodel.cxx b/sd/source/ui/unoidl/unomodel.cxx index 532195433da4..fb13ca2ac236 100644 --- a/sd/source/ui/unoidl/unomodel.cxx +++ b/sd/source/ui/unoidl/unomodel.cxx @@ -4748,9 +4748,9 @@ void SAL_CALL SdXImpressDocument::dispose() mxTransGradientTable = nullptr; mxMarkerTable = nullptr; mxDrawingPool = nullptr; + mpDocShell = nullptr; } - SdDrawPagesAccess::SdDrawPagesAccess( SdXImpressDocument& rMyModel ) noexcept : mpModel( &rMyModel) {