summaryrefslogtreecommitdiffstats
path: root/net/url_request/url_request_job.cc
diff options
context:
space:
mode:
Diffstat (limited to 'net/url_request/url_request_job.cc')
-rw-r--r--net/url_request/url_request_job.cc10
1 files changed, 9 insertions, 1 deletions
diff --git a/net/url_request/url_request_job.cc b/net/url_request/url_request_job.cc
index 4518d8a..b84fdd5 100644
--- a/net/url_request/url_request_job.cc
+++ b/net/url_request/url_request_job.cc
@@ -122,13 +122,21 @@ void URLRequestJob::ContinueDespiteLastError() {
void URLRequestJob::FollowDeferredRedirect() {
DCHECK(deferred_redirect_status_code_ != -1);
+
// NOTE: deferred_redirect_url_ may be invalid, and attempting to redirect to
// such an URL will fail inside FollowRedirect. The DCHECK above asserts
// that we called OnReceivedRedirect.
- FollowRedirect(deferred_redirect_url_, deferred_redirect_status_code_);
+ // It is also possible that FollowRedirect will drop the last reference to
+ // this job, so we need to reset our members before calling it.
+
+ GURL redirect_url = deferred_redirect_url_;
+ int redirect_status_code = deferred_redirect_status_code_;
+
deferred_redirect_url_ = GURL();
deferred_redirect_status_code_ = -1;
+
+ FollowRedirect(redirect_url, redirect_status_code);
}
int64 URLRequestJob::GetByteReadCount() const {