]> git.proxmox.com Git - pve-http-server.git/commitdiff
fix #4344: http-server: ignore unused multipart headers
authorJohn Hollowell <jhollowe@johnhollowell.com>
Fri, 18 Nov 2022 01:39:10 +0000 (01:39 +0000)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Mon, 6 Mar 2023 11:54:09 +0000 (12:54 +0100)
In commit 0fbcbc2 ("fix #3990: multipart upload: rework to fix
uploading small files") a breaking change was added which now
requires the file's multipart part to have a `Content-Type` even
though the content type is never used. It is just included to consume
those bytes so phase 2 (dumping the file contents into the file) can
continue.

Avoid this overly strict and unused requirement.

Signed-off-by: John Hollowell <jhollowe@johnhollowell.com>
 [ T: resolve merge conflict, add telling commit message ]
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
src/PVE/APIServer/AnyEvent.pm

index 3cd77fae4115dd63f31034af67ca8ecdddec00b9..af44e9c32f967a6e248f96729baa2df43946d4c6 100644 (file)
@@ -1223,15 +1223,15 @@ sub file_upload_multipart {
            $extract_form_disposition->('checksum');
 
            if ($hdl->{rbuf} =~
-               s/^${delim_re}
-               Content-Disposition:\ (.*?);\ name="(.*?)";\ filename="([^"]+)"${newline_re}
-               Content-Type:\ \S*${newline_re}{2}
-               //sxx
+               s/^${delim_re}Content-Disposition:\ (.*?);\ name="(.*?)";\ filename="([^"]+)"${newline_re}//sxx
            ) {
                assert_form_disposition($1);
                die "wrong field name '$2' for file upload, expected 'filename'" if $2 ne "filename";
                $rstate->{phase} = 2;
                $rstate->{params}->{filename} = trim($3);
+
+               # remove any remaining multipart "headers" like Content-Type
+               $hdl->{rbuf} =~ s/^.*?${newline_re}{2}//s
            }
        }