]> git.proxmox.com Git - pve-http-server.git/commitdiff
upload: re-allow white space in filenames
authorDominik Csapak <d.csapak@proxmox.com>
Mon, 7 Nov 2022 15:07:49 +0000 (16:07 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Mon, 7 Nov 2022 15:40:15 +0000 (16:40 +0100)
Some fields (e.g. filename) can contain spaces, but our 'trim'
function, would only return the value until the first whitespace
character instead of removing leading/trailing white space. This lead
to passing the wrong filename to the API call (e.g. 'foo' instead of
'foo (1).iso'), which would then reject it because of the 'wrong'
extension.

Fix this by just using the battle proven trim from pve-common.

Fixes: 0fbcbc2 ("fix #3990: multipart upload: rework to fix uploading small files")
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
src/PVE/APIServer/AnyEvent.pm

index 4296ded0094da434d59124b173a872e176e4a7b2..39061ad82457e5ef81ba658a067bb11fc643331b 100644 (file)
@@ -46,7 +46,7 @@ use URI;
 
 use PVE::INotify;
 use PVE::SafeSyslog;
-use PVE::Tools;
+use PVE::Tools qw(trim);
 
 use PVE::APIServer::Formatter;
 use PVE::APIServer::Utils;
@@ -1186,11 +1186,6 @@ my sub assert_form_disposition {
 sub file_upload_multipart {
     my ($self, $reqstate, $auth, $method, $path, $rstate) = @_;
 
-    my $trim = sub {
-       $_[0] =~ /\s*(\S+)/;
-       return $1;
-    };
-
     eval {
        my $boundary = $rstate->{boundary};
        my $hdl = $reqstate->{hdl};
@@ -1210,7 +1205,7 @@ sub file_upload_multipart {
            my ($name) = @_;
            if ($hdl->{rbuf} =~ s/^${delim_re}Content-Disposition: (.*?); name="$name"(.*?)($delim_re)/$3/s) {
                assert_form_disposition($1);
-               $rstate->{params}->{$name} = $trim->($2);
+               $rstate->{params}->{$name} = trim($2);
            }
        };
 
@@ -1228,7 +1223,7 @@ sub file_upload_multipart {
                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);
+               $rstate->{params}->{filename} = trim($3);
            }
        }