summaryrefslogtreecommitdiff
path: root/xmloff
diff options
context:
space:
mode:
authorNoel <noel.grandin@collabora.co.uk>2021-02-12 13:02:25 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2021-02-24 07:26:23 +0100
commite5f436bc53e0d07654901ef7cc8ff56d04f0686e (patch)
tree9a34198e0dbd1e24b7ae6ff1f50963fd7aea1189 /xmloff
parent964c70e7e1b193432f6677d0fab589d47313d9c5 (diff)
restore namespace unwinding in SvXMLImport
accidentally lost during the fastparser conversion Change-Id: I7d53e9f32dd8cff650b9ffb6dae493419ce8461f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110813 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'xmloff')
-rw-r--r--xmloff/source/core/XMLEmbeddedObjectImportContext.cxx3
-rw-r--r--xmloff/source/core/xmlimp.cxx11
2 files changed, 11 insertions, 3 deletions
diff --git a/xmloff/source/core/XMLEmbeddedObjectImportContext.cxx b/xmloff/source/core/XMLEmbeddedObjectImportContext.cxx
index f190a4a18c75..79705901cf2d 100644
--- a/xmloff/source/core/XMLEmbeddedObjectImportContext.cxx
+++ b/xmloff/source/core/XMLEmbeddedObjectImportContext.cxx
@@ -82,8 +82,7 @@ css::uno::Reference< css::xml::sax::XFastContextHandler > XMLEmbeddedObjectImpor
sal_Int32 ,
const css::uno::Reference< css::xml::sax::XFastAttributeList >& )
{
- // we have no state, so avoid allocation cost, and just use a single instance
- return this;
+ return new XMLEmbeddedObjectImportContext_Impl(GetImport(), mxFastHandler);
}
void XMLEmbeddedObjectImportContext_Impl::startFastElement(
diff --git a/xmloff/source/core/xmlimp.cxx b/xmloff/source/core/xmlimp.cxx
index 33cca656fb1f..8c4b02f50754 100644
--- a/xmloff/source/core/xmlimp.cxx
+++ b/xmloff/source/core/xmlimp.cxx
@@ -768,7 +768,7 @@ void SAL_CALL SvXMLImport::startFastElement (sal_Int32 Element,
maNamespaceAttrList->Clear();
maNamespaceHandler->addNSDeclAttributes( maNamespaceAttrList );
- processNSAttributes( maNamespaceAttrList );
+ std::unique_ptr<SvXMLNamespaceMap> pRewindMap = processNSAttributes( maNamespaceAttrList );
SvXMLImportContextRef xContext;
const bool bRootContext = maContexts.empty();
@@ -793,6 +793,10 @@ void SAL_CALL SvXMLImport::startFastElement (sal_Int32 Element,
if ( !xContext )
xContext.set( new SvXMLImportContext( *this ) );
+ // Remember old namespace map.
+ if( pRewindMap )
+ xContext->PutRewindMap(std::move(pRewindMap));
+
// Call a startElement at the new context.
xContext->startFastElement( Element, Attribs );
@@ -847,8 +851,13 @@ void SAL_CALL SvXMLImport::endFastElement (sal_Int32 Element)
return;
}
SvXMLImportContextRef xContext = std::move(maContexts.top());
+ // Get a namespace map to rewind.
+ std::unique_ptr<SvXMLNamespaceMap> pRewindMap = xContext->TakeRewindMap();
maContexts.pop();
xContext->endFastElement( Element );
+ // Rewind a namespace map.
+ if (pRewindMap)
+ mpNamespaceMap = std::move(pRewindMap);
}
void SAL_CALL SvXMLImport::endUnknownElement (const OUString & rPrefix, const OUString & rLocalName)