fix(client): HTTP/1 client "Transfer-Encoding" repair code would panic (#2410)
Closes #2409
This commit is contained in:
@@ -117,9 +117,9 @@ pub(super) fn add_chunked(mut entry: http::header::OccupiedEntry<'_, HeaderValue
|
||||
// + 2 for ", "
|
||||
let new_cap = line.as_bytes().len() + CHUNKED.len() + 2;
|
||||
let mut buf = BytesMut::with_capacity(new_cap);
|
||||
buf.copy_from_slice(line.as_bytes());
|
||||
buf.copy_from_slice(b", ");
|
||||
buf.copy_from_slice(CHUNKED.as_bytes());
|
||||
buf.extend_from_slice(line.as_bytes());
|
||||
buf.extend_from_slice(b", ");
|
||||
buf.extend_from_slice(CHUNKED.as_bytes());
|
||||
|
||||
*line = HeaderValue::from_maybe_shared(buf.freeze())
|
||||
.expect("original header value plus ascii is valid");
|
||||
|
||||
@@ -401,6 +401,36 @@ test! {
|
||||
body: None,
|
||||
}
|
||||
|
||||
test! {
|
||||
name: client_transfer_encoding_repair,
|
||||
|
||||
server:
|
||||
expected: "\
|
||||
GET / HTTP/1.1\r\n\
|
||||
transfer-encoding: foo, chunked\r\n\
|
||||
host: {addr}\r\n\
|
||||
\r\n\
|
||||
5\r\n\
|
||||
hello\r\n\
|
||||
0\r\n\r\n\
|
||||
",
|
||||
reply: REPLY_OK,
|
||||
|
||||
client:
|
||||
request: {
|
||||
method: GET,
|
||||
url: "http://{addr}/",
|
||||
headers: {
|
||||
"transfer-encoding" => "foo",
|
||||
},
|
||||
body: "hello", // not Body::empty
|
||||
},
|
||||
response:
|
||||
status: OK,
|
||||
headers: {},
|
||||
body: None,
|
||||
}
|
||||
|
||||
test! {
|
||||
name: client_get_req_body_chunked_http10,
|
||||
|
||||
|
||||
Reference in New Issue
Block a user