xmloff: ODF import: fix crash on fdo34997-1.odt
Clean up the redundant checks too, these are all called after first
checking hasCurrentFieldCtx().
(regression from 463178fef5c22f1a04d10e54491852d56e2038b0)
Change-Id: Ieec848944ef576caf319d5da7dc11139a4d26c58
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/140503
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/xmloff/source/text/XMLTextMarkImportContext.cxx b/xmloff/source/text/XMLTextMarkImportContext.cxx
index 4e42899..4a71194 100644
--- a/xmloff/source/text/XMLTextMarkImportContext.cxx
+++ b/xmloff/source/text/XMLTextMarkImportContext.cxx
@@ -436,7 +436,7 @@ void XMLTextMarkImportContext::endFastElement(sal_Int32 nElement)
}
case TypeFieldmarkEnd:
{
if (!m_rHelper.hasCurrentFieldSeparator())
if (m_rHelper.hasCurrentFieldCtx() && !m_rHelper.hasCurrentFieldSeparator())
{ // backward compat for old files without separator
InsertFieldmark(GetImport(), m_rHelper, true);
}
diff --git a/xmloff/source/text/txtimp.cxx b/xmloff/source/text/txtimp.cxx
index f26ce21..aad6c61 100644
--- a/xmloff/source/text/txtimp.cxx
+++ b/xmloff/source/text/txtimp.cxx
@@ -2127,49 +2127,26 @@ XMLTextImportHelper::popFieldCtx()
void XMLTextImportHelper::addFieldParam( const OUString& name, const OUString& value )
{
assert(!m_xImpl->m_FieldStack.empty());
if (!m_xImpl->m_FieldStack.empty()) {
Impl::field_stack_item_t & FieldStackItem(m_xImpl->m_FieldStack.top());
std::get<1>(FieldStackItem).emplace_back( name, value );
}
Impl::field_stack_item_t & FieldStackItem(m_xImpl->m_FieldStack.top());
std::get<1>(FieldStackItem).emplace_back( name, value );
}
::std::pair<OUString, OUString> XMLTextImportHelper::getCurrentFieldType() const
{
assert(!m_xImpl->m_FieldStack.empty());
if (!m_xImpl->m_FieldStack.empty())
{
return std::get<0>(m_xImpl->m_FieldStack.top());
}
else
{
return {};
}
return std::get<0>(m_xImpl->m_FieldStack.top());
}
uno::Reference<text::XTextRange> XMLTextImportHelper::getCurrentFieldStart() const
{
assert(!m_xImpl->m_FieldStack.empty());
if (!m_xImpl->m_FieldStack.empty())
{
return std::get<3>(m_xImpl->m_FieldStack.top());
}
else
{
return {};
}
return std::get<3>(m_xImpl->m_FieldStack.top());
}
bool XMLTextImportHelper::hasCurrentFieldSeparator() const
{
assert(!m_xImpl->m_FieldStack.empty());
if (!m_xImpl->m_FieldStack.empty())
{
return std::get<2>(m_xImpl->m_FieldStack.top()).is();
}
else
{
return {};
}
return std::get<2>(m_xImpl->m_FieldStack.top()).is();
}
bool XMLTextImportHelper::hasCurrentFieldCtx() const
@@ -2180,7 +2157,7 @@ bool XMLTextImportHelper::hasCurrentFieldCtx() const
void XMLTextImportHelper::setCurrentFieldParamsTo(css::uno::Reference< css::text::XFormField> const &xFormField)
{
assert(!m_xImpl->m_FieldStack.empty());
if (!m_xImpl->m_FieldStack.empty() && xFormField.is())
if (xFormField.is())
{
FieldParamImporter(&std::get<1>(m_xImpl->m_FieldStack.top()),
xFormField->getParameters()).Import();