From df134ed6e82698187a0848846a3490a127be99a6 Mon Sep 17 00:00:00 2001 From: cantor Date: Fri, 13 Apr 2007 03:04:27 +0000 Subject: [PATCH] Put decrypted objects into their own document. git-svn-id: https://svn.middleware.georgetown.edu/cpp-opensaml2/trunk@222 fb386ef7-a10c-0410-8ebf-fd3f8e989ab0 --- saml/saml2/core/impl/Assertions20Impl.cpp | 8 ++++++-- saml/saml2/core/impl/Protocols20Impl.cpp | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/saml/saml2/core/impl/Assertions20Impl.cpp b/saml/saml2/core/impl/Assertions20Impl.cpp index fe7a7b0..3a714b7 100644 --- a/saml/saml2/core/impl/Assertions20Impl.cpp +++ b/saml/saml2/core/impl/Assertions20Impl.cpp @@ -202,8 +202,12 @@ namespace opensaml { if (frag->hasChildNodes() && frag->getFirstChild()==frag->getLastChild()) { DOMNode* plaintext=frag->getFirstChild(); if (plaintext->getNodeType()==DOMNode::ELEMENT_NODE) { - auto_ptr ret(XMLObjectBuilder::buildOneFromElement(static_cast(plaintext))); - ret->releaseThisAndChildrenDOM(); + // Import the tree into a new Document that we can bind to the unmarshalled object. + XercesJanitor newdoc(XMLToolingConfig::getConfig().getParser().newDocument()); + DOMElement* treecopy = static_cast(newdoc->importNode(plaintext, true)); + newdoc->appendChild(treecopy); + auto_ptr ret(XMLObjectBuilder::buildOneFromElement(treecopy, true)); + newdoc.release(); return ret.release(); } } diff --git a/saml/saml2/core/impl/Protocols20Impl.cpp b/saml/saml2/core/impl/Protocols20Impl.cpp index 800400b..e4b652e 100644 --- a/saml/saml2/core/impl/Protocols20Impl.cpp +++ b/saml/saml2/core/impl/Protocols20Impl.cpp @@ -1298,8 +1298,12 @@ namespace opensaml { if (frag->hasChildNodes() && frag->getFirstChild()==frag->getLastChild()) { DOMNode* plaintext=frag->getFirstChild(); if (plaintext->getNodeType()==DOMNode::ELEMENT_NODE) { - auto_ptr ret(XMLObjectBuilder::buildOneFromElement(static_cast(plaintext))); - ret->releaseThisAndChildrenDOM(); + // Import the tree into a new Document that we can bind to the unmarshalled object. + XercesJanitor newdoc(XMLToolingConfig::getConfig().getParser().newDocument()); + DOMElement* treecopy = static_cast(newdoc->importNode(plaintext, true)); + newdoc->appendChild(treecopy); + auto_ptr ret(XMLObjectBuilder::buildOneFromElement(treecopy, true)); + newdoc.release(); return ret.release(); } } -- 2.1.4