Skip to content

Commit d536ce2

Browse files
committed
Fix RequestBuilder to send explicitly sensitive headers
Closes #1549
1 parent 28840af commit d536ce2

File tree

1 file changed

+25
-1
lines changed

1 file changed

+25
-1
lines changed

src/async_impl/request.rs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,12 @@ impl RequestBuilder {
203203
match <HeaderName as TryFrom<K>>::try_from(key) {
204204
Ok(key) => match <HeaderValue as TryFrom<V>>::try_from(value) {
205205
Ok(mut value) => {
206-
value.set_sensitive(sensitive);
206+
// We want to potentially make an unsensitive header
207+
// to be sensitive, not the reverse. So, don't turn off
208+
// a previously sensitive header.
209+
if sensitive {
210+
value.set_sensitive(true);
211+
}
207212
req.headers_mut().append(key, value);
208213
}
209214
Err(e) => error = Some(crate::error::builder(e.into())),
@@ -840,6 +845,25 @@ mod tests {
840845
assert!(req.headers()["authorization"].is_sensitive());
841846
}
842847

848+
#[test]
849+
fn test_explicit_sensitive_header() {
850+
let client = Client::new();
851+
let some_url = "https://localhost/";
852+
853+
let mut header = http::HeaderValue::from_static("in plain sight");
854+
header.set_sensitive(true);
855+
856+
let req = client
857+
.get(some_url)
858+
.header("hiding", header)
859+
.build()
860+
.expect("request build");
861+
862+
assert_eq!(req.url().as_str(), "https://localhost/");
863+
assert_eq!(req.headers()["hiding"], "in plain sight");
864+
assert!(req.headers()["hiding"].is_sensitive());
865+
}
866+
843867
#[test]
844868
fn convert_from_http_request() {
845869
let http_request = HttpRequest::builder()

0 commit comments

Comments
 (0)