From: cantor Date: Wed, 16 Jan 2008 18:14:41 +0000 (+0000) Subject: Switch to memory input source to allow for 16-bit data. X-Git-Tag: 2.4.1~259 X-Git-Url: http://www.project-moonshot.org/gitweb/?p=shibboleth%2Fopensaml2.git;a=commitdiff_plain;h=584c0345b8c8ac43333a75e93a945fd4b176e291 Switch to memory input source to allow for 16-bit data. git-svn-id: https://svn.middleware.georgetown.edu/cpp-opensaml2/trunk@362 fb386ef7-a10c-0410-8ebf-fd3f8e989ab0 --- diff --git a/saml/saml1/binding/impl/SAML1POSTDecoder.cpp b/saml/saml1/binding/impl/SAML1POSTDecoder.cpp index 0e60ffd..0ce1779 100644 --- a/saml/saml1/binding/impl/SAML1POSTDecoder.cpp +++ b/saml/saml1/binding/impl/SAML1POSTDecoder.cpp @@ -28,6 +28,8 @@ #include "saml2/metadata/Metadata.h" #include "saml2/metadata/MetadataProvider.h" +#include +#include #include #include #include @@ -87,18 +89,18 @@ XMLObject* SAML1POSTDecoder::decode( throw BindingException("Request missing SAMLResponse or TARGET form parameters."); relayState = TARGET; - // Decode the base64 into SAML. + // Decode the base64 into XML. unsigned int x; XMLByte* decoded=Base64::decode(reinterpret_cast(samlResponse),&x); if (!decoded) throw BindingException("Unable to decode base64 in POST profile response."); - log.debug("decoded SAML response:\n%s", decoded); - istringstream is(reinterpret_cast(decoded)); - XMLString::release(&decoded); - + log.debugStream() << "decoded SAML response:" << logging::eol << decoded << logging::eol; + // Parse and bind the document into an XMLObject. + MemBufInputSource src(decoded, x, "SAMLResponse", true); + Wrapper4InputSource dsrc(&src, false); DOMDocument* doc = (policy.getValidating() ? XMLToolingConfig::getConfig().getValidatingParser() - : XMLToolingConfig::getConfig().getParser()).parse(is); + : XMLToolingConfig::getConfig().getParser()).parse(dsrc); XercesJanitor janitor(doc); auto_ptr xmlObject(XMLObjectBuilder::buildOneFromElement(doc->getDocumentElement(), true)); janitor.release(); diff --git a/saml/saml2/binding/impl/SAML2POSTDecoder.cpp b/saml/saml2/binding/impl/SAML2POSTDecoder.cpp index 1898c4b..fb0342b 100644 --- a/saml/saml2/binding/impl/SAML2POSTDecoder.cpp +++ b/saml/saml2/binding/impl/SAML2POSTDecoder.cpp @@ -27,8 +27,10 @@ #include "saml2/metadata/Metadata.h" #include "saml2/metadata/MetadataProvider.h" -#include +#include +#include #include +#include #include #include #include @@ -96,13 +98,13 @@ XMLObject* SAML2POSTDecoder::decode( XMLByte* decoded=Base64::decode(reinterpret_cast(msg),&x); if (!decoded) throw BindingException("Unable to decode base64 in POST binding message."); - log.debug("decoded SAML message:\n%s", decoded); - istringstream is(reinterpret_cast(decoded)); - XMLString::release(&decoded); + log.debugStream() << "decoded SAML message:" << logging::eol << decoded << logging::eol; // Parse and bind the document into an XMLObject. + MemBufInputSource src(decoded, x, "SAMLMessage", true); + Wrapper4InputSource dsrc(&src, false); DOMDocument* doc = (policy.getValidating() ? XMLToolingConfig::getConfig().getValidatingParser() - : XMLToolingConfig::getConfig().getParser()).parse(is); + : XMLToolingConfig::getConfig().getParser()).parse(dsrc); XercesJanitor janitor(doc); auto_ptr xmlObject(XMLObjectBuilder::buildOneFromElement(doc->getDocumentElement(), true)); janitor.release(); diff --git a/saml/saml2/binding/impl/SAML2RedirectDecoder.cpp b/saml/saml2/binding/impl/SAML2RedirectDecoder.cpp index ff0f5f7..f682d2d 100644 --- a/saml/saml2/binding/impl/SAML2RedirectDecoder.cpp +++ b/saml/saml2/binding/impl/SAML2RedirectDecoder.cpp @@ -106,7 +106,7 @@ XMLObject* SAML2RedirectDecoder::decode( // Now we have to inflate it. stringstream s; - if (inflate((char*)decoded, x, s)==0) { + if (inflate(reinterpret_cast(decoded), x, s)==0) { XMLString::release(&decoded); throw BindingException("Unable to inflate Redirect binding message."); }