https://bugs.documentfoundation.org/show_bug.cgi?id=104517
Bug ID: 104517
Summary: WeakReference ScHeaderFooterTextData::xContentObj can
die too early in JunitTest_sc_unoapi_4
Product: LibreOffice
Version: unspecified
Hardware: All
OS: All
Status: UNCONFIRMED
Severity: normal
Priority: medium
Component: Calc
Assignee: [email protected]
Reporter: [email protected]
CC: [email protected]
Since
<https://cgit.freedesktop.org/libreoffice/core/commit/?id=fc29ace3438eea09afe3ddbb5118458cbb531b06>
"better fix for memory leak around calc header-footer UNO objects":
* ScHeaderFooterTextData::xContentObj has been changed to a WeakReference
* ScHeaderFooterTextObj::getString is checking that xContentObj is still alive:
> uno::Reference<css::sheet::XHeaderFooterContent> xContentObj =
> aTextData.GetContentObj();
> if (!xContentObj.is())
> throw css::uno::RuntimeException("");
I assume that throw is meant to be of the "this cannot happen" kind (like an
assert)---as otherwise that commit would apparently not be a sound change.
However, at least JunitTest_sc_unoapi_4 sporadically triggers that throw (see
e.g.,
<https://cgit.freedesktop.org/libreoffice/core/commit/?id=8bd3d06d974fbd301665630e3c5396db9c9e30d9>
"Throw RuntimeException with message"). I've found that running that test with
env var SAL_LOG=+WARN+INFO (which changes timing by producing lots of info log
output) makes the failure more likely.
When locally changing ScHeaderFooterTextData::xContentObj to be a raw pointer
(so that dead deref in ScHeaderFooterTextObj::getString can be observed with
memory checkers) and running the test with ASan, I get:
> ==9225==ERROR: AddressSanitizer: heap-use-after-free on address
> 0x60800077cb48 at pc 0x7f523b2aca49 bp 0x7f52497e09f0 sp 0x7f52497e09e8
> READ of size 8 at 0x60800077cb48 thread T116 (cppu_threadpool)
> info:sal.file:9225:90:sal/osl/unx/file.cxx:1032:
> osl_openFile(/home/sbergman/lo-clang/core/workdir/JunitTest/sc_unoapi_4/user/user/CqlwmE,
> writeable) => 68
> info:sal.file:9225:90:sal/osl/unx/file.cxx:1074:
> osl_closeFile(/home/sbergman/lo-clang/core/workdir/JunitTest/sc_unoapi_4/user/user/CqlwmE:68)
> info:sal.osl.condition:9225:90:sal/osl/unx/conditn.cxx:85:
> osl_destroyCondition(0x6080002c7e20)
> #0 0x7f523b2aca48 in
> com::sun::star::uno::Reference<com::sun::star::sheet::XHeaderFooterContent>::Reference(com::sun::star::sheet::XHeaderFooterContent*)
> include/com/sun/star/uno/Reference.hxx:152:22
> #1 0x7f523e013502 in ScHeaderFooterTextData::GetContentObj() const
> sc/inc/textuno.hxx:133:96
> #2 0x7f523e108370 in ScHeaderFooterTextObj::getString()
> sc/source/ui/unoobj/textuno.cxx:333:78
> #3 0x7f523e108a9c in non-virtual thunk to
> ScHeaderFooterTextObj::getString() sc/source/ui/unoobj/textuno.cxx
> #4 0x7f525ff6371a in gcc3::callVirtualMethod(void*, unsigned int, void*,
> _typelib_TypeDescriptionReference*, bool, unsigned long*, unsigned int,
> unsigned long*, double*)
> bridges/source/cpp_uno/gcc3_linux_x86-64/callvirtualmethod.cxx:77:5
> #5 0x7f525ff6019f in
> cpp_call(bridges::cpp_uno::shared::UnoInterfaceProxy*,
> bridges::cpp_uno::shared::VtableSlot, _typelib_TypeDescriptionReference*,
> int, _typelib_MethodParameter*, void*, void**, _uno_Any**)
> bridges/source/cpp_uno/gcc3_linux_x86-64/uno2cpp.cxx:233:13
> #6 0x7f525ff5ea48 in
> bridges::cpp_uno::shared::unoInterfaceProxyDispatch(_uno_Interface*,
> _typelib_TypeDescription const*, void*, void**, _uno_Any**)
> bridges/source/cpp_uno/gcc3_linux_x86-64/uno2cpp.cxx:420:13
> #7 0x7f525ae5a865 in
> binaryurp::IncomingRequest::execute_throw(binaryurp::BinaryAny*,
> std::__debug::vector<binaryurp::BinaryAny,
> std::allocator<binaryurp::BinaryAny> >*) const
> binaryurp/source/incomingrequest.cxx:239:13
> #8 0x7f525ae5888c in binaryurp::IncomingRequest::execute() const
> binaryurp/source/incomingrequest.cxx:78:26
> #9 0x7f525aebc79b in request binaryurp/source/reader.cxx:85:9
> #10 0x7f52c6ca3303 in cppu_threadpool::JobQueue::enter(long, bool)
> cppu/source/threadpool/jobqueue.cxx:107:17
> #11 0x7f52c6ccd4a9 in cppu_threadpool::ORequestThread::run()
> cppu/source/threadpool/thread.cxx:165:31
> #12 0x7f52c6cd9742 in threadFunc include/osl/thread.hxx:185:15
> #13 0x7f52cfcf537f in osl_thread_start_Impl(void*)
> sal/osl/unx/thread.cxx:240:9
> #14 0x7f52ce2915c9 in start_thread (/lib64/libpthread.so.0+0x75c9)
> #15 0x7f52cd9a80ec in __clone (/lib64/libc.so.6+0x1030ec)
>
> 0x60800077cb48 is located 40 bytes inside of 88-byte region
> [0x60800077cb20,0x60800077cb78)
> freed by thread T118 (cppu_threadpool) here:
> #0 0x4cf730 in __interceptor_cfree.localalias.1
> /home/sbergman/clang/git/src/projects/compiler-rt/lib/asan/asan_malloc_linux.cc:54
> #1 0x7f52cfafc2e0 in rtl_freeMemory_SYSTEM(void*)
> sal/rtl/alloc_global.cxx:279:5
> #2 0x7f52cfafcf50 in rtl_freeMemory sal/rtl/alloc_global.cxx:355:5
> #3 0x7f525ff6aa68 in
> bridges::cpp_uno::shared::freeUnoInterfaceProxy(_uno_ExtEnvironment*, void*)
> bridges/source/cpp_uno/shared/unointerfaceproxy.cxx:42:19
> #4 0x7f52c6ee2976 in (anonymous
> namespace)::s_stub_defenv_revokeInterface(__va_list_tag (*) [1])
> cppu/source/uno/lbenv.cxx:372:17
> #5 0x7f52c6e9dbc7 in s_environment_invoke_v(_uno_Environment*,
> _uno_Environment*, void (*)(__va_list_tag (*) [1]), __va_list_tag (*) [1])
> cppu/source/uno/EnvStack.cxx:293:9
> #6 0x7f52c6e9d8f2 in uno_Environment_invoke_v
> cppu/source/uno/EnvStack.cxx:312:5
> #7 0x7f52c6e9e0a2 in uno_Environment_invoke
> cppu/source/uno/EnvStack.cxx:321:5
> #8 0x7f525ae09d59 in
> com::sun::star::uno::UnoInterfaceReference::~UnoInterfaceReference()
> include/uno/dispatcher.hxx:103:9
> #9 0x7f525ae59dae in
> binaryurp::IncomingRequest::execute_throw(binaryurp::BinaryAny*,
> std::__debug::vector<binaryurp::BinaryAny,
> std::allocator<binaryurp::BinaryAny> >*) const
> binaryurp/source/incomingrequest.cxx:137:18
> #10 0x7f525ae5888c in binaryurp::IncomingRequest::execute() const
> binaryurp/source/incomingrequest.cxx:78:26
> #11 0x7f525aebc79b in request binaryurp/source/reader.cxx:85:9
> #12 0x7f52c6ca3303 in cppu_threadpool::JobQueue::enter(long, bool)
> cppu/source/threadpool/jobqueue.cxx:107:17
> #13 0x7f52c6ccd4a9 in cppu_threadpool::ORequestThread::run()
> cppu/source/threadpool/thread.cxx:165:31
> #14 0x7f52c6cd9742 in threadFunc include/osl/thread.hxx:185:15
> #15 0x7f52cfcf537f in osl_thread_start_Impl(void*)
> sal/osl/unx/thread.cxx:240:9
> #16 0x7f52ce2915c9 in start_thread (/lib64/libpthread.so.0+0x75c9)
>
> previously allocated by thread T116 (cppu_threadpool) here:
> #0 0x4cf8e8 in malloc
> /home/sbergman/clang/git/src/projects/compiler-rt/lib/asan/asan_malloc_linux.cc:64
> #1 0x7f52cfafc2b0 in rtl_allocateMemory_SYSTEM(unsigned long)
> sal/rtl/alloc_global.cxx:272:12
> #2 0x7f52cfafc88a in rtl_allocateMemory sal/rtl/alloc_global.cxx:310:12
> #3 0x7f523b2a009f in ScPageHFItem::QueryValue(com::sun::star::uno::Any&,
> unsigned char) const sc/source/core/data/attrib.cxx:575:9
> #4 0x7f52bb04b9c2 in
> SfxItemPropertySet::getPropertyValue(SfxItemPropertySimpleEntry const&,
> SfxItemSet const&, com::sun::star::uno::Any&) const
> svl/source/items/itemprop.cxx:188:16
> #5 0x7f523e0f56c0 in ScStyleObj::getPropertyValue_Impl(rtl::OUString
> const&) sc/source/ui/unoobj/styleuno.cxx:1948:39
> #6 0x7f523e0f81dd in ScStyleObj::getPropertyValue(rtl::OUString const&)
> sc/source/ui/unoobj/styleuno.cxx:1984:12
> #7 0x7f523e0f832c in non-virtual thunk to
> ScStyleObj::getPropertyValue(rtl::OUString const&)
> sc/source/ui/unoobj/styleuno.cxx
> #8 0x7f525ff6019f in
> cpp_call(bridges::cpp_uno::shared::UnoInterfaceProxy*,
> bridges::cpp_uno::shared::VtableSlot, _typelib_TypeDescriptionReference*,
> int, _typelib_MethodParameter*, void*, void**, _uno_Any**)
> bridges/source/cpp_uno/gcc3_linux_x86-64/uno2cpp.cxx:233:13
> #9 0x7f525ff5ea48 in
> bridges::cpp_uno::shared::unoInterfaceProxyDispatch(_uno_Interface*,
> _typelib_TypeDescription const*, void*, void**, _uno_Any**)
> bridges/source/cpp_uno/gcc3_linux_x86-64/uno2cpp.cxx:420:13
> #10 0x7f525ae5a865 in
> binaryurp::IncomingRequest::execute_throw(binaryurp::BinaryAny*,
> std::__debug::vector<binaryurp::BinaryAny,
> std::allocator<binaryurp::BinaryAny> >*) const
> binaryurp/source/incomingrequest.cxx:239:13
> #11 0x7f525ae5888c in binaryurp::IncomingRequest::execute() const
> binaryurp/source/incomingrequest.cxx:78:26
> #12 0x7f525aebc79b in request binaryurp/source/reader.cxx:85:9
> #13 0x7f52c6ca3303 in cppu_threadpool::JobQueue::enter(long, bool)
> cppu/source/threadpool/jobqueue.cxx:107:17
> #14 0x7f52c6ccd4a9 in cppu_threadpool::ORequestThread::run()
> cppu/source/threadpool/thread.cxx:165:31
> #15 0x7f52c6cd9742 in threadFunc include/osl/thread.hxx:185:15
> #16 0x7f52cfcf537f in osl_thread_start_Impl(void*)
> sal/osl/unx/thread.cxx:240:9
> #17 0x7f52ce2915c9 in start_thread (/lib64/libpthread.so.0+0x75c9)
(with a Clang trunk -Og build that likely inlines some calls, so their frames
would be missing).
--
You are receiving this mail because:
You are the assignee for the bug._______________________________________________
Libreoffice-bugs mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/libreoffice-bugs