multipart: Force a CRLF at the end of request

This commit is contained in:
kennytm
2018-07-18 07:34:59 +08:00
committed by Sean McArthur
parent c1c5f14b7c
commit a52520941f
2 changed files with 6 additions and 6 deletions

View File

@@ -108,7 +108,7 @@ impl Form {
} }
// If there is a at least one field there is a special boundary for the very last field. // If there is a at least one field there is a special boundary for the very last field.
if self.fields.len() != 0 { if self.fields.len() != 0 {
length += 2 + self.boundary.len() as u64 + 2 length += 2 + self.boundary.len() as u64 + 4
} }
Some(length) Some(length)
} }
@@ -271,7 +271,7 @@ impl Reader {
Some(Box::new(reader)) Some(Box::new(reader))
} else { } else {
Some(Box::new(reader.chain(Cursor::new( Some(Box::new(reader.chain(Cursor::new(
format!("--{}--", self.form.boundary), format!("--{}--\r\n", self.form.boundary),
)))) ))))
} }
} else { } else {
@@ -377,7 +377,7 @@ mod tests {
\r\n\ \r\n\
--boundary\r\n\ --boundary\r\n\
Content-Disposition: form-data; name=\"key3\"; filename=\"filename\"\r\n\r\n\ Content-Disposition: form-data; name=\"key3\"; filename=\"filename\"\r\n\r\n\
value3\r\n--boundary--"; value3\r\n--boundary--\r\n";
form.reader().read_to_end(&mut output).unwrap(); form.reader().read_to_end(&mut output).unwrap();
// These prints are for debug purposes in case the test fails // These prints are for debug purposes in case the test fails
println!( println!(
@@ -413,7 +413,7 @@ mod tests {
value2\r\n\ value2\r\n\
--boundary\r\n\ --boundary\r\n\
Content-Disposition: form-data; name=\"key3\"; filename=\"filename\"\r\n\r\n\ Content-Disposition: form-data; name=\"key3\"; filename=\"filename\"\r\n\r\n\
value3\r\n--boundary--"; value3\r\n--boundary--\r\n";
form.reader().read_to_end(&mut output).unwrap(); form.reader().read_to_end(&mut output).unwrap();
// These prints are for debug purposes in case the test fails // These prints are for debug purposes in case the test fails
println!( println!(

View File

@@ -15,7 +15,7 @@ fn test_multipart() {
--{0}\r\n\ --{0}\r\n\
Content-Disposition: form-data; name=\"foo\"\r\n\r\n\ Content-Disposition: form-data; name=\"foo\"\r\n\r\n\
bar\r\n\ bar\r\n\
--{0}--\ --{0}--\r\n\
", form.boundary()); ", form.boundary());
let server = server! { let server = server! {
@@ -24,7 +24,7 @@ fn test_multipart() {
user-agent: $USERAGENT\r\n\ user-agent: $USERAGENT\r\n\
accept: */*\r\n\ accept: */*\r\n\
content-type: multipart/form-data; boundary={}\r\n\ content-type: multipart/form-data; boundary={}\r\n\
content-length: 123\r\n\ content-length: 125\r\n\
accept-encoding: gzip\r\n\ accept-encoding: gzip\r\n\
host: $HOST\r\n\ host: $HOST\r\n\
\r\n\ \r\n\