sw/source/filter/ww8/wrtw8nds.cxx | 41 ++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 19 deletions(-)
New commits: commit 5a66ae01890cbb02713475b0077529bb2e748b88 Author: Miklos Vajna <vmik...@collabora.com> AuthorDate: Wed Mar 13 14:07:50 2024 +0100 Commit: Xisco Fauli <xiscofa...@libreoffice.org> CommitDate: Fri Mar 15 12:53:26 2024 +0100 sw: fix fieldmark crash in MSWordExportBase::OutputTextNode() Crashreport signature: program/libmswordlo.so MSWordExportBase::OutputTextNode(SwTextNode&) sw/source/filter/ww8/wrtw8nds.cxx:2547 program/libmswordlo.so MSWordExportBase::WriteText() sw/source/filter/ww8/wrtww8.cxx:2936 program/libmswordlo.so DocxExport::WriteMainText() /opt/rh/devtoolset-10/root/usr/include/c++/10/bits/stl_tree.h:1261 program/libmswordlo.so DocxExport::ExportDocument_Impl() sw/source/filter/ww8/docxexport.cxx:541 Keep the assert, because ideally it should not happen that we have no fieldmark at CH_TXT_ATR_FIELDEND, but crashing in non-debug builds goes a bit too far. Change-Id: I428f46821771802a0ea2beaaf86463487e561aff Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164844 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmik...@collabora.com> (cherry picked from commit 27a41c7e4ec0e82e2ed0ca2577574f5295a16057) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164826 Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/sw/source/filter/ww8/wrtw8nds.cxx b/sw/source/filter/ww8/wrtw8nds.cxx index e27137946ef5..be9dd03c7e64 100644 --- a/sw/source/filter/ww8/wrtw8nds.cxx +++ b/sw/source/filter/ww8/wrtw8nds.cxx @@ -2645,33 +2645,36 @@ void MSWordExportBase::OutputTextNode( SwTextNode& rNode ) assert(pFieldmark); - if (pFieldmark->GetFieldname() == ODF_FORMDATE) + if (pFieldmark) { - if(GetExportFormat() == MSWordExportBase::ExportFormat::DOCX) // supported by DOCX only + if (pFieldmark->GetFieldname() == ODF_FORMDATE) { - OutputField( nullptr, ww::eFORMDATE, OUString(), FieldFlags::Close ); + if(GetExportFormat() == MSWordExportBase::ExportFormat::DOCX) // supported by DOCX only + { + OutputField( nullptr, ww::eFORMDATE, OUString(), FieldFlags::Close ); + } } - } - else - { - ww::eField eFieldId = lcl_getFieldId( pFieldmark ); - if (pFieldmark->GetFieldname() == ODF_UNHANDLED) + else { - IFieldmark::parameter_map_t::const_iterator it = pFieldmark->GetParameters()->find( ODF_ID_PARAM ); - if ( it != pFieldmark->GetParameters()->end() ) + ww::eField eFieldId = lcl_getFieldId( pFieldmark ); + if (pFieldmark->GetFieldname() == ODF_UNHANDLED) { - OUString sFieldId; - it->second >>= sFieldId; - eFieldId = static_cast<ww::eField>(sFieldId.toInt32()); + IFieldmark::parameter_map_t::const_iterator it = pFieldmark->GetParameters()->find( ODF_ID_PARAM ); + if ( it != pFieldmark->GetParameters()->end() ) + { + OUString sFieldId; + it->second >>= sFieldId; + eFieldId = static_cast<ww::eField>(sFieldId.toInt32()); + } } - } - OutputField( nullptr, eFieldId, OUString(), FieldFlags::Close ); + OutputField( nullptr, eFieldId, OUString(), FieldFlags::Close ); - if (pFieldmark->GetFieldname() == ODF_FORMTEXT - && GetExportFormat() != MSWordExportBase::ExportFormat::DOCX ) - { - AppendBookmark( pFieldmark->GetName() ); + if (pFieldmark->GetFieldname() == ODF_FORMTEXT + && GetExportFormat() != MSWordExportBase::ExportFormat::DOCX ) + { + AppendBookmark( pFieldmark->GetName() ); + } } } }