diff --git a/PVE/API2/Storage/Status.pm b/PVE/API2/Storage/Status.pm index 7069244..11ad60f 100644 --- a/PVE/API2/Storage/Status.pm +++ b/PVE/API2/Storage/Status.pm @@ -413,11 +413,7 @@ __PACKAGE__->register_method ({ my $size = -s $tmpfilename; die "temporary file '$tmpfilename' does not exist\n" if !defined($size); - my $filename = $param->{filename}; - - chomp $filename; - $filename =~ s/^.*[\/\\]//; - $filename =~ s/[^-a-zA-Z0-9_.]/_/g; + my $filename = PVE::Storage::normalize_content_filename($param->{filename}); my $path; diff --git a/PVE/Storage.pm b/PVE/Storage.pm index 719fe5b..b8e6311 100755 --- a/PVE/Storage.pm +++ b/PVE/Storage.pm @@ -1945,4 +1945,16 @@ sub assert_sid_unused { return undef; } +# removes leading/trailing spaces and (back)slashes completely +# substitutes every non-ASCII-alphanumerical char with '_', except '_.-' +sub normalize_content_filename { + my ($filename) = @_; + + chomp $filename; + $filename =~ s/^.*[\/\\]//; + $filename =~ s/[^a-zA-Z0-9_.-]/_/g; + + return $filename; +} + 1;