You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by su...@apache.org on 2014/09/12 19:08:18 UTC
git commit: [TS-2938] - Fix core dump in 307 redirect follow handling
Repository: trafficserver
Updated Branches:
refs/heads/master ecf790630 -> 1736377ce
[TS-2938] - Fix core dump in 307 redirect follow handling
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/1736377c
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/1736377c
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/1736377c
Branch: refs/heads/master
Commit: 1736377ce48d51ac29bd4e76ddb626b6e9ed95ea
Parents: ecf7906
Author: Sudheer Vinukonda <su...@yahoo-inc.com>
Authored: Fri Sep 12 17:07:50 2014 +0000
Committer: Sudheer Vinukonda <su...@yahoo-inc.com>
Committed: Fri Sep 12 17:07:50 2014 +0000
----------------------------------------------------------------------
proxy/http/HttpSM.cc | 51 +++++++++++++++++++++++------------------
proxy/http/HttpTransact.cc | 1 +
2 files changed, 30 insertions(+), 22 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1736377c/proxy/http/HttpSM.cc
----------------------------------------------------------------------
diff --git a/proxy/http/HttpSM.cc b/proxy/http/HttpSM.cc
index 1813380..1e20072 100644
--- a/proxy/http/HttpSM.cc
+++ b/proxy/http/HttpSM.cc
@@ -7421,6 +7421,35 @@ HttpSM::redirect_request(const char *redirect_url, const int redirect_len)
return;
}
+ bool valid_origHost = true;
+ int origHost_len, origMethod_len;
+ char origHost[MAXDNAME];
+ char origMethod[255];
+ int origPort = 80;
+
+ if(t_state.hdr_info.server_request.valid()) {
+
+ origPort = t_state.hdr_info.server_request.port_get();
+
+ char* tmpOrigHost = (char *) t_state.hdr_info.server_request.value_get(MIME_FIELD_HOST, MIME_LEN_HOST, &origHost_len);
+ if (tmpOrigHost) {
+ memcpy(origHost, tmpOrigHost, origHost_len);
+ origHost[origHost_len] = '\0';
+ } else {
+ valid_origHost = false;
+ }
+
+ char *tmpOrigMethod = (char *) t_state.hdr_info.server_request.method_get(&origMethod_len);
+ if (tmpOrigMethod) {
+ memcpy(origMethod, tmpOrigMethod, origMethod_len);
+ } else {
+ valid_origHost = false;
+ }
+ } else {
+ DebugSM("http_redir_error", "t_state.hdr_info.server_request not valid");
+ valid_origHost = false;
+ }
+
t_state.redirect_info.redirect_in_process = true;
// set the passed in location url and parse it
@@ -7450,28 +7479,6 @@ HttpSM::redirect_request(const char *redirect_url, const int redirect_len)
t_state.hdr_info.client_response.destroy();
}
-
- bool valid_origHost = true;
- int origHost_len, origMethod_len;
- char* tmpOrigHost = (char *) t_state.hdr_info.server_request.value_get(MIME_FIELD_HOST, MIME_LEN_HOST, &origHost_len);
- char origHost[origHost_len + 1];
-
- if (tmpOrigHost)
- memcpy(origHost, tmpOrigHost, origHost_len);
- else
- valid_origHost = false;
-
- origHost[origHost_len] = '\0';
- int origPort = t_state.hdr_info.server_request.port_get();
-
- char *tmpOrigMethod = (char *) t_state.hdr_info.server_request.method_get(&origMethod_len);
- char origMethod[origMethod_len + 1];
-
- if (tmpOrigMethod)
- memcpy(origMethod, tmpOrigMethod, origMethod_len);
- else
- valid_origHost = false;
-
int scheme = t_state.next_hop_scheme;
int scheme_len = hdrtoken_index_to_length(scheme);
const char* next_hop_scheme = hdrtoken_index_to_wks(scheme);
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1736377c/proxy/http/HttpTransact.cc
----------------------------------------------------------------------
diff --git a/proxy/http/HttpTransact.cc b/proxy/http/HttpTransact.cc
index 2c6f81a..22906d8 100644
--- a/proxy/http/HttpTransact.cc
+++ b/proxy/http/HttpTransact.cc
@@ -2981,6 +2981,7 @@ HttpTransact::handle_cache_write_lock(State* s)
}
if (s->cache_info.write_lock_state == CACHE_WL_READ_RETRY) {
+ DebugTxn("http_error", "calling hdr_info.server_request.destroy");
s->hdr_info.server_request.destroy();
HandleCacheOpenReadHitFreshness(s);
} else {