From c2fb0b1cf674f8227cd6c41f2bd8a4c8b6efeef9 Mon Sep 17 00:00:00 2001 From: Will Andrews Date: Wed, 10 Jan 2024 20:50:08 -0600 Subject: [PATCH] multipart: fallback to filename as part name (#1045) This is not supported by the standard, but allowed by some implementations for compatibility. --- src/filters/multipart.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/filters/multipart.rs b/src/filters/multipart.rs index 103f25760..f8a6d36b7 100644 --- a/src/filters/multipart.rs +++ b/src/filters/multipart.rs @@ -120,7 +120,7 @@ impl Stream for FormData { match self.inner.poll_next_field(cx) { Poll::Pending => Poll::Pending, Poll::Ready(Ok(Some(part))) => { - if part.name().is_some() { + if part.name().is_some() || part.file_name().is_some() { Poll::Ready(Some(Ok(Part { part }))) } else { Poll::Ready(Some(Err(crate::Error::new(MultipartFieldMissingName)))) @@ -137,7 +137,9 @@ impl Stream for FormData { impl Part { /// Get the name of this part. pub fn name(&self) -> &str { - self.part.name().expect("checked for name previously") + self.part + .name() + .unwrap_or_else(|| self.part.file_name().expect("checked for name previously")) } /// Get the filename of this part, if present. @@ -174,7 +176,7 @@ impl Part { impl fmt::Debug for Part { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { let mut builder = f.debug_struct("Part"); - builder.field("name", &self.part.name()); + builder.field("name", &self.name()); if let Some(ref filename) = self.part.file_name() { builder.field("filename", filename);