Relax restriction on HTTP method.
[shibboleth/cpp-opensaml.git] / saml / saml2 / binding / impl / SAML2RedirectEncoder.cpp
index ac711f1..006185e 100644 (file)
@@ -116,14 +116,15 @@ long SAML2RedirectEncoder::encode(
     DOMElement* rootElement = xmlObject->marshall();
     string xmlbuf;
     XMLHelper::serialize(rootElement, xmlbuf);
-    log.debug("marshalled message: %s", xmlbuf.c_str());
+    log.debug("marshalled message:\n%s", xmlbuf.c_str());
     
     unsigned int len;
     char* deflated = deflate(const_cast<char*>(xmlbuf.c_str()), xmlbuf.length(), &len);
     if (!deflated)
         throw BindingException("Failed to deflate message.");
     
-    XMLByte* encoded=Base64::encode(reinterpret_cast<XMLByte*>(deflated),len,&len);
+    xsecsize_t xlen;
+    XMLByte* encoded=Base64::encode(reinterpret_cast<XMLByte*>(deflated), len, &xlen);
     delete[] deflated;
     if (!encoded)
         throw BindingException("Base64 encoding of XML failed.");
@@ -131,7 +132,13 @@ long SAML2RedirectEncoder::encode(
     // Create beginnings of redirect query string.
     const URLEncoder* escaper = XMLToolingConfig::getConfig().getURLEncoder();
     xmlbuf.erase();
-    xmlbuf.append(reinterpret_cast<char*>(encoded),len);
+    xmlbuf.append(reinterpret_cast<char*>(encoded), xlen);
+#ifdef OPENSAML_XERCESC_HAS_XMLBYTE_RELEASE
+    XMLString::release(&encoded);
+#else
+    XMLString::release((char**)&encoded);
+#endif
+    
     xmlbuf = (request ? "SAMLRequest=" : "SAMLResponse=") + escaper->encode(xmlbuf.c_str()); 
     if (relayState && *relayState)
         xmlbuf = xmlbuf + "&RelayState=" + escaper->encode(relayState);