diff options
author | Luboš Luňák <l.lunak@suse.cz> | 2011-12-02 15:36:55 +0100 |
---|---|---|
committer | Luboš Luňák <l.lunak@suse.cz> | 2011-12-07 14:47:11 +0100 |
commit | cc39235d47719193d27565ba47c00c9a91ecbce8 (patch) | |
tree | 03c72d910116d31719aaf7a444098e14e8413520 /writerfilter/source/ooxml/OOXMLFastContextHandler.cxx | |
parent | a8f46cdc8ea1d6e8041bde5072e5d6aa2e3d61a3 (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.cxx | 6 |
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 > |