From cdb13e786c99d2517591a172fa46523a8bc42729 Mon Sep 17 00:00:00 2001 From: Scott Cantor Date: Mon, 15 Feb 2010 14:01:32 +0000 Subject: [PATCH] Wrap importNode call in exception handler. --- xmltooling/AbstractDOMCachingXMLObject.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/xmltooling/AbstractDOMCachingXMLObject.cpp b/xmltooling/AbstractDOMCachingXMLObject.cpp index bfd0353..117225a 100644 --- a/xmltooling/AbstractDOMCachingXMLObject.cpp +++ b/xmltooling/AbstractDOMCachingXMLObject.cpp @@ -124,9 +124,18 @@ void AbstractDOMCachingXMLObject::releaseChildrenDOM(bool propagateRelease) cons DOMElement* AbstractDOMCachingXMLObject::cloneDOM(DOMDocument* doc) const { if (getDOM()) { - if (!doc) - doc=DOMImplementationRegistry::getDOMImplementation(NULL)->createDocument(); - return static_cast(doc->importNode(getDOM(),true)); + DOMDocument* cloneDoc = doc; + if (!cloneDoc) + cloneDoc=DOMImplementationRegistry::getDOMImplementation(NULL)->createDocument(); + try { + return static_cast(cloneDoc->importNode(getDOM(),true)); + } + catch (XMLException& ex) { + if (!doc) + cloneDoc->release(); + auto_ptr_char temp(ex.getMessage()); + m_log.error("DOM clone failed: %s", temp.get()); + } } return NULL; } -- 2.1.4