chiark / gitweb /
server: wip, parse disposition
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 8 Aug 2021 16:42:01 +0000 (17:42 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 8 Aug 2021 16:42:01 +0000 (17:42 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/bin/server.rs
src/multipart.rs
src/prelude.rs

index dfee81960ae90f71238441fe1b627a6d9eeab462..816ae0ce835c4ce921808432e9a8e32b6f250521 100644 (file)
@@ -61,17 +61,11 @@ async fn handle(
     else if let Some(start) = find_iter.next() { start + boundary.len() }
     else { throw!(anyhow!("initial boundary not found")) };
 
+    let comp = multipart::process_component
+      (&mut warnings, &initial[start..], PartName::m)?;
 
-/*
-    let comp = multipart::process_component(
-
-    if { 
-
-initial[start..].strip_prefixstarts_with(b"\n")
-    || initial[start..].starts_with(b"\r\n")*/
-
-    eprintln!("boundary={:?} initial={:?} start={}",
-              boundary, initial, start);
+    eprintln!("boundary={:?} initial={:?} start={} comp={:?}",
+              boundary, initial, start, &comp);
 
     Ok::<_,AE>(())
   }.await {
index 877d83af8869451da0d867df140f1e12aa0a2dc9..82ce4ac4af73e775871604a36945edc998129ba5 100644 (file)
@@ -4,6 +4,7 @@
 
 use crate::prelude::*;
 
+#[derive(Debug)]
 pub struct Component<'b> {
   pub name: PartName,
   pub payload_start: &'b [u8],
@@ -41,6 +42,13 @@ pub fn process_component<'b>(warnings: &mut Warnings,
         regex_captures!(r#"^Content-Disposition[ \t]*:[ \t]*(.*)$"#i, l) { y }
         else { return Ok(()) };
 
+      let disposition = disposition.trim_end();
+      if disposition.len() >= 100 { throw!(anyhow!(
+        "Content-Disposition value implausibly long"
+      )) }
+      // This let's us pretend it's a mime type, so we can use mime::Mime
+      let disposition = format!("dummy/{}", disposition);
+
       let disposition: mime::Mime = disposition.parse()
         .context("parse Content-Disposition")?;
       let name = disposition.get_param("name")
index f3e0de220c6b14dd48446522a3a98708abc1a483..f3d823c09a50be7635c72b74e370b1679d961717 100644 (file)
@@ -55,6 +55,7 @@ pub use eyre::Error as AE;
 pub use crate::config::{self, InstanceConfig, u32Ext as _};
 pub use crate::ini;
 pub use crate::ipif::Ipif;
+pub use crate::multipart::{self, PartName};
 pub use crate::utils::*;
 pub use crate::queue::*;
 pub use crate::reporter::*;