From aee77710f45c5f5723d9cf47f3d0755aaa7c62e2 Mon Sep 17 00:00:00 2001 From: Scott Cantor Date: Fri, 9 Jan 2015 03:39:44 +0000 Subject: [PATCH] https://issues.shibboleth.net/jira/browse/CPPXT-97 --- apache/mod_shib.cpp | 26 +++++++++++++++----------- fastcgi/shibauthorizer.cpp | 12 +++++++----- fastcgi/shibresponder.cpp | 12 +++++++----- isapi_shib/isapi_shib.cpp | 24 ++++++++++++++---------- nsapi_shib/nsapi_shib.cpp | 4 +++- 5 files changed, 46 insertions(+), 32 deletions(-) diff --git a/apache/mod_shib.cpp b/apache/mod_shib.cpp index 311297b..edf99e1 100644 --- a/apache/mod_shib.cpp +++ b/apache/mod_shib.cpp @@ -602,19 +602,23 @@ public: m_req->content_type = ap_psprintf(m_req->pool, "%s", type); } void setResponseHeader(const char* name, const char* value) { - HTTPResponse::setResponseHeader(name, value); + HTTPResponse::setResponseHeader(name, value); + if (name) { #ifdef SHIB_DEFERRED_HEADERS - if (!m_rc) - // this happens on subrequests - m_rc = get_request_config(m_req); - if (m_handler) { - if (!m_rc->hdr_out) - m_rc->hdr_out = ap_make_table(m_req->pool, 5); - ap_table_add(m_rc->hdr_out, name, value); - } - else + if (!m_rc) { + // this happens on subrequests + m_rc = get_request_config(m_req); + } + if (m_handler) { + if (!m_rc->hdr_out) { + m_rc->hdr_out = ap_make_table(m_req->pool, 5); + } + ap_table_add(m_rc->hdr_out, name, value); + } + else #endif - ap_table_add(m_req->err_headers_out, name, value); + ap_table_add(m_req->err_headers_out, name, value); + } } long sendResponse(istream& in, long status) { if (status != XMLTOOLING_HTTP_STATUS_OK) diff --git a/fastcgi/shibauthorizer.cpp b/fastcgi/shibauthorizer.cpp index 214a729..75d3185 100644 --- a/fastcgi/shibauthorizer.cpp +++ b/fastcgi/shibauthorizer.cpp @@ -198,11 +198,13 @@ public: } void setResponseHeader(const char* name, const char* value) { HTTPResponse::setResponseHeader(name, value); - // Set for later. - if (value) - m_response_headers.insert(make_pair(name,value)); - else - m_response_headers.erase(name); + if (name) { + // Set for later. + if (value) + m_response_headers.insert(make_pair(name,value)); + else + m_response_headers.erase(name); + } } const char* getQueryString() const { return FCGX_GetParam("QUERY_STRING", m_req->envp); diff --git a/fastcgi/shibresponder.cpp b/fastcgi/shibresponder.cpp index e23bf58..9f63a2f 100644 --- a/fastcgi/shibresponder.cpp +++ b/fastcgi/shibresponder.cpp @@ -150,11 +150,13 @@ public: void setResponseHeader(const char* name, const char* value) { HTTPResponse::setResponseHeader(name, value); - // Set for later. - if (value) - m_headers.insert(make_pair(name,value)); - else - m_headers.erase(name); + if (name) { + // Set for later. + if (value) + m_headers.insert(make_pair(name,value)); + else + m_headers.erase(name); + } } const char* getQueryString() const { diff --git a/isapi_shib/isapi_shib.cpp b/isapi_shib/isapi_shib.cpp index 40a248c..f7bded1 100644 --- a/isapi_shib/isapi_shib.cpp +++ b/isapi_shib/isapi_shib.cpp @@ -492,11 +492,13 @@ public: } void setResponseHeader(const char* name, const char* value) { HTTPResponse::setResponseHeader(name, value); - // Set for later. - if (value) - m_headers.insert(make_pair(name,value)); - else - m_headers.erase(name); + if (name) { + // Set for later. + if (value) + m_headers.insert(make_pair(name,value)); + else + m_headers.erase(name); + } } long sendResponse(istream& in, long status) { string hdr = string("Connection: close\r\n"); @@ -866,11 +868,13 @@ public: } void setResponseHeader(const char* name, const char* value) { HTTPResponse::setResponseHeader(name, value); - // Set for later. - if (value) - m_headers.insert(make_pair(name,value)); - else - m_headers.erase(name); + if (name) { + // Set for later. + if (value) + m_headers.insert(make_pair(name,value)); + else + m_headers.erase(name); + } } const char* getQueryString() const { return m_lpECB->lpszQueryString; diff --git a/nsapi_shib/nsapi_shib.cpp b/nsapi_shib/nsapi_shib.cpp index 886d7cc..4b0c678 100644 --- a/nsapi_shib/nsapi_shib.cpp +++ b/nsapi_shib/nsapi_shib.cpp @@ -427,7 +427,9 @@ public: } void setResponseHeader(const char* name, const char* value) { HTTPResponse::setResponseHeader(name, value); - pblock_nvinsert(name, value, m_rq->srvhdrs); + if (name) { + pblock_nvinsert(name, value, m_rq->srvhdrs); + } } long sendResponse(istream& in, long status) { -- 2.1.4