summaryrefslogtreecommitdiff
path: root/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
diff options
context:
space:
mode:
authorLuboš Luňák <l.lunak@suse.cz>2011-12-02 15:36:55 +0100
committerLuboš Luňák <l.lunak@suse.cz>2011-12-07 14:47:11 +0100
commitcc39235d47719193d27565ba47c00c9a91ecbce8 (patch)
tree03c72d910116d31719aaf7a444098e14e8413520 /writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
parenta8f46cdc8ea1d6e8041bde5072e5d6aa2e3d61a3 (diff)
process element in endFastElement(), not in dtor
Otherwise with malformed xml the dtor is called in a place where the processing of the formula apparently corrupts the internal representation somehow and it is impossible to write the document back as docx. As a bonus, all UI elements related to saving get disabled, so the document then cannot be saved at all. Although this is only with malformed xml, which hopefully should never happen, it's still better to avoid this. Moreover it seems to be the proper way of coding the handlers anyway.
Diffstat (limited to 'writerfilter/source/ooxml/OOXMLFastContextHandler.cxx')
-rw-r--r--writerfilter/source/ooxml/OOXMLFastContextHandler.cxx6
1 files changed, 5 insertions, 1 deletions
diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
index b313b0f33f2b..732391ce4cad 100644
--- a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
+++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
@@ -2371,10 +2371,11 @@ Token_t OOXMLFastContextHandlerWrapper::getToken() const
OOXMLFastContextHandlerMath::OOXMLFastContextHandlerMath(OOXMLFastContextHandler* pContext)
: OOXMLFastContextHandlerProperties(pContext)
+ , depthCount( 0 )
{
}
-OOXMLFastContextHandlerMath::~OOXMLFastContextHandlerMath()
+void OOXMLFastContextHandlerMath::process()
{
SvGlobalName name( SO3_SM_CLASSID );
comphelper::EmbeddedObjectContainer container;
@@ -2398,12 +2399,15 @@ void OOXMLFastContextHandlerMath::lcl_startFastElement(Token_t Element,
throw (uno::RuntimeException, xml::sax::SAXException)
{
buffer.appendOpeningTag( Element, Attribs );
+ ++depthCount;
}
void OOXMLFastContextHandlerMath::lcl_endFastElement(Token_t Element)
throw (uno::RuntimeException, xml::sax::SAXException)
{
buffer.appendClosingTag( Element );
+ if( --depthCount == 0 )
+ process();
}
uno::Reference< xml::sax::XFastContextHandler >