sw/source/writerfilter/dmapper/DomainMapperTableHandler.cxx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
New commits: commit 5d678aa14046041efef1e025fcc1c064e2d59efd Author: Miklos Vajna <vmik...@collabora.com> AuthorDate: Thu Feb 6 08:35:33 2025 +0100 Commit: Xisco Fauli <xiscofa...@libreoffice.org> CommitDate: Fri Feb 7 16:12:21 2025 +0100 writerfilter: fix crash in DomainMapperTableHandler::endTable() Crashreport signature: /opt/rh/devtoolset-12/root/usr/include/c++/12/bits/stl_stack.h:234: std::stack<_Tp, _Sequence>::reference std::stack<_Tp, _Sequence>::top() [with _Tp = writerfilter::dmapper::TextAppendContext; _Sequence = std::deque<writerfilter::dmapper::TextAppendContext, std::allocator<writerfilter::dmapper::TextAppendContext> >; reference = writerfilter::dmapper::TextAppendContext&]: Assertion '!this->empty()' failed. SIG Fatal signal received: SIGABRT code: 18446744073709551610 for address: 0x7300004d65 program/libwriterfilterlo.so writerfilter::dmapper::DomainMapper_Impl::GetTopTextAppend() /opt/rh/devtoolset-12/root/usr/include/c++/12/bits/stl_stack.h:234 program/libwriterfilterlo.so writerfilter::dmapper::DomainMapperTableHandler::endTable(unsigned int) workdir/UnoApiHeadersTarget/offapi/normal/com/sun/star/text/XTextAppendAndConvert.hpp:23 program/libwriterfilterlo.so writerfilter::dmapper::TableManager::resolveCurrentTable() include/tools/ref.hxx:56 program/libwriterfilterlo.so writerfilter::dmapper::TableManager::endLevel() writerfilter/source/dmapper/TableManager.cxx:461 It seems the trouble is that DomainMapperTableHandler::endTable() calls GetTopTextAppend() unconditionally, which asserts that the text append stack is non-empty. GetCurrentXText() already check if this stack is empty, so use that to check for emptyness and only then get the top of the stack. Later DomainMapperTableHandler::endTable() already checks if xTextAppendAndConvert is an empty reference or not. Change-Id: Ibb377cb03f8beaed9b3c9d45e322c8ad1f9d26c3 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/181231 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmik...@collabora.com> (cherry picked from commit 7192e3e5d6f875e4e9d2eda6de9e1f31c4917f62) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/181242 Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/sw/source/writerfilter/dmapper/DomainMapperTableHandler.cxx b/sw/source/writerfilter/dmapper/DomainMapperTableHandler.cxx index 6c2a72ddeb9e..4962794c0c40 100644 --- a/sw/source/writerfilter/dmapper/DomainMapperTableHandler.cxx +++ b/sw/source/writerfilter/dmapper/DomainMapperTableHandler.cxx @@ -1661,7 +1661,11 @@ void DomainMapperTableHandler::endTable(unsigned int nestedTableLevel) sal_Int32 nTableWidthType = text::SizeType::FIX; m_aTableProperties->getValue(TablePropertyMap::TABLE_WIDTH_TYPE, nTableWidthType); // m_xText points to the body text, get the current xText from m_rDMapper_Impl, in case e.g. we would be in a header. - uno::Reference<text::XTextAppendAndConvert> xTextAppendAndConvert(m_rDMapper_Impl.GetTopTextAppend(), uno::UNO_QUERY); + uno::Reference<text::XTextAppendAndConvert> xTextAppendAndConvert; + if (m_rDMapper_Impl.GetCurrentXText()) + { + xTextAppendAndConvert.set(m_rDMapper_Impl.GetTopTextAppend(), uno::UNO_QUERY); + } uno::Reference<beans::XPropertySet> xFrameAnchor; // Writer layout has problems with redlines on floating table rows in footnotes, avoid