aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/net/http_loader.rs6
-rw-r--r--tests/unit/net/http_loader.rs10
2 files changed, 12 insertions, 4 deletions
diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs
index dc31dc3b2c7..5aca88e19eb 100644
--- a/components/net/http_loader.rs
+++ b/components/net/http_loader.rs
@@ -166,7 +166,7 @@ fn load_for_consumer(load_data: LoadData,
Err(LoadError::Connection(url, e)) => {
send_error(url, e, start_chan)
}
- Err(LoadError::MaxRedirects(url)) => {
+ Err(LoadError::MaxRedirects(url, _)) => {
send_error(url, "too many redirects".to_owned(), start_chan)
}
Err(LoadError::Cors(url, msg)) |
@@ -336,7 +336,7 @@ pub enum LoadError {
Ssl(Url, String),
InvalidRedirect(Url, String),
Decoding(Url, String),
- MaxRedirects(Url),
+ MaxRedirects(Url, u32), // u32 indicates number of redirects that occurred
ConnectionAborted(String),
Cancelled(Url, String),
}
@@ -759,7 +759,7 @@ pub fn load<A, B>(load_data: LoadData,
}
if iters > max_redirects {
- return Err(LoadError::MaxRedirects(doc_url));
+ return Err(LoadError::MaxRedirects(doc_url, iters - 1));
}
if &*doc_url.scheme != "http" && &*doc_url.scheme != "https" {
diff --git a/tests/unit/net/http_loader.rs b/tests/unit/net/http_loader.rs
index 7d7b8768c3b..1a035c075e7 100644
--- a/tests/unit/net/http_loader.rs
+++ b/tests/unit/net/http_loader.rs
@@ -28,6 +28,7 @@ use std::io::{self, Write, Read, Cursor};
use std::sync::mpsc::Receiver;
use std::sync::{Arc, mpsc, RwLock};
use url::Url;
+use util::prefs;
const DEFAULT_USER_AGENT: &'static str = "Test-agent";
@@ -1103,13 +1104,20 @@ fn test_load_errors_when_there_is_too_many_redirects() {
let http_state = HttpState::new();
let ui_provider = TestProvider::new();
+ let redirect_limit = 13.;
+ prefs::set_pref("network.http.redirection-limit",
+ prefs::PrefValue::Number(redirect_limit));
+
match load(load_data, &ui_provider, &http_state, None, &Factory,
DEFAULT_USER_AGENT.to_owned(), &CancellationListener::new(None)) {
- Err(LoadError::MaxRedirects(url)) => {
+ Err(LoadError::MaxRedirects(url, num_redirects)) => {
+ assert_eq!(num_redirects, redirect_limit as u32);
assert_eq!(url.domain().unwrap(), "mozilla.com")
},
_ => panic!("expected max redirects to fail")
}
+
+ prefs::reset_pref("network.http.redirection-limit");
}
#[test]