fix multipart with unicode filename (#420)
This commit is contained in:
		| @@ -397,7 +397,7 @@ impl PercentEncoding { | |||||||
|             "Content-Disposition: form-data; {}{}{}", |             "Content-Disposition: form-data; {}{}{}", | ||||||
|             self.format_parameter("name", name), |             self.format_parameter("name", name), | ||||||
|             match field.file_name { |             match field.file_name { | ||||||
|                 Some(ref file_name) => format!("; {}", self.format_parameter("filename", file_name)), |                 Some(ref file_name) => format!("; {}", self.format_filename(file_name)), | ||||||
|                 None => String::new(), |                 None => String::new(), | ||||||
|             }, |             }, | ||||||
|             match field.mime { |             match field.mime { | ||||||
| @@ -414,6 +414,16 @@ impl PercentEncoding { | |||||||
|         }) |         }) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     // According to RFC7578 Section 4.2, `filename*=` syntax is invalid. | ||||||
|  |     // See https://github.com/seanmonstar/reqwest/issues/419. | ||||||
|  |     fn format_filename(&self, filename: &str) -> String { | ||||||
|  |         let legal_filename = filename.replace("\\", "\\\\") | ||||||
|  |                                      .replace("\"", "\\\"") | ||||||
|  |                                      .replace("\r", "\\\r") | ||||||
|  |                                      .replace("\n", "\\\n"); | ||||||
|  |         format!("filename=\"{}\"", legal_filename) | ||||||
|  |     } | ||||||
|  |  | ||||||
|     fn format_parameter(&self, name: &str, value: &str) -> String { |     fn format_parameter(&self, name: &str, value: &str) -> String { | ||||||
|         let legal_value = match *self { |         let legal_value = match *self { | ||||||
|             PercentEncoding::PathSegment => { |             PercentEncoding::PathSegment => { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user