From c0f4bdcc7ca45e2920c676e5734353ba598bcdbc Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Mon, 30 Mar 2020 21:10:33 +0200 Subject: RTF import: reset writerfilter bit even if the import fails The old code did not handle when e.g. a lang::WrappedTargetRuntimeException is thrown between the set and unset. The DOCX import had the same problem. Change-Id: I7336d08057a875db985e8b647b320abd97c6eb81 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91381 Tested-by: Jenkins Reviewed-by: Miklos Vajna --- writerfilter/source/filter/RtfFilter.cxx | 14 ++++++++------ writerfilter/source/filter/WriterFilter.cxx | 5 ++++- 2 files changed, 12 insertions(+), 7 deletions(-) (limited to 'writerfilter/source/filter') diff --git a/writerfilter/source/filter/RtfFilter.cxx b/writerfilter/source/filter/RtfFilter.cxx index cf1b31aeb016..bfa9a208786e 100644 --- a/writerfilter/source/filter/RtfFilter.cxx +++ b/writerfilter/source/filter/RtfFilter.cxx @@ -35,6 +35,7 @@ #include #include #include +#include #include #include @@ -102,6 +103,13 @@ sal_Bool RtfFilter::filter(const uno::Sequence& rDescripto xDocProps.set(m_xDstDoc, uno::UNO_QUERY); xDocProps->setPropertyValue("UndocumentedWriterfilterHack", uno::makeAny(true)); } + comphelper::ScopeGuard g([xDocProps] { + if (xDocProps.is()) // not in cppunittest? + { + // note: pStream.clear calls RemoveLastParagraph() + xDocProps->setPropertyValue("UndocumentedWriterfilterHack", uno::makeAny(false)); + } + }); try { @@ -166,12 +174,6 @@ sal_Bool RtfFilter::filter(const uno::Sequence& rDescripto TOOLS_INFO_EXCEPTION("writerfilter", "Exception caught"); } - if (m_xDstDoc.is()) // not in cppunittest? - { - // note: pStream.clear calls RemoveLastParagraph() - xDocProps->setPropertyValue("UndocumentedWriterfilterHack", uno::makeAny(false)); - } - if (xStatusIndicator.is()) xStatusIndicator->end(); return bResult; diff --git a/writerfilter/source/filter/WriterFilter.cxx b/writerfilter/source/filter/WriterFilter.cxx index a043dcb2764a..5e14545b9e11 100644 --- a/writerfilter/source/filter/WriterFilter.cxx +++ b/writerfilter/source/filter/WriterFilter.cxx @@ -44,6 +44,7 @@ #include #include #include +#include using namespace ::com::sun::star; @@ -157,6 +158,9 @@ sal_Bool WriterFilter::filter(const uno::Sequence& rDescri { uno::Reference const xDocProps(m_xDstDoc, uno::UNO_QUERY); xDocProps->setPropertyValue("UndocumentedWriterfilterHack", uno::makeAny(true)); + comphelper::ScopeGuard g([xDocProps] { + xDocProps->setPropertyValue("UndocumentedWriterfilterHack", uno::makeAny(false)); + }); utl::MediaDescriptor aMediaDesc(rDescriptor); bool bRepairStorage = aMediaDesc.getUnpackedValueOrDefault("RepairPackage", false); bool bSkipImages @@ -283,7 +287,6 @@ sal_Bool WriterFilter::filter(const uno::Sequence& rDescri pStream.clear(); // note: pStream.clear calls RemoveLastParagraph() - xDocProps->setPropertyValue("UndocumentedWriterfilterHack", uno::makeAny(false)); return true; } -- cgit