Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package perl-Plack for openSUSE:Factory checked in at 2026-06-13 18:47:47 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/perl-Plack (Old) and /work/SRC/openSUSE:Factory/.perl-Plack.new.1981 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Plack" Sat Jun 13 18:47:47 2026 rev:14 rq:1359051 version:1.0054 Changes: -------- --- /work/SRC/openSUSE:Factory/perl-Plack/perl-Plack.changes 2024-03-08 18:08:45.537183636 +0100 +++ /work/SRC/openSUSE:Factory/.perl-Plack.new.1981/perl-Plack.changes 2026-06-13 18:49:46.375500283 +0200 @@ -1,0 +2,23 @@ +Tue May 5 07:33:15 UTC 2026 - Tina Müller <[email protected]> + +- updated to 1.0054 + see /usr/share/doc/packages/perl-Plack/Changes + + 1.0054 2026-05-04 23:38:13 PDT + [BUG FIXES] + - Revert Plack::App::File REQUEST_METHOD check after locating file due to regression #725 + 1.0053 2026-04-28 15:59:58 PDT + [DEPRECATIONS] + - Plack::Middleware::XSendfile is deprecated due to security design issues; see POD for migration examples + [BUG FIXES] + - Plack::App::File now checks REQUEST_METHOD after locating the file #681 + 1.0052 2026-04-27 12:59:19 PDT + [BUG FIXES] + - stat already open filehandle rather than filename in Plack::App::File #716 + [IMPROVEMENTS] + - Updated MIME type list in Plack::MIME sourced from rack/rack #706 + - Avoid try block just for checking $object->isa in HTTP::Message::PSGI #712 + - Remove the last remaining uses of base.pm #707 + - Document security trust model and frontend configuration for XSendfile middleware + +------------------------------------------------------------------- Old: ---- Plack-1.0051.tar.gz New: ---- Plack-1.0054.tar.gz README.md _scmsync.obsinfo build.specials.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ perl-Plack.spec ++++++ --- /var/tmp/diff_new_pack.ZoQQ3s/_old 2026-06-13 18:49:46.967524878 +0200 +++ /var/tmp/diff_new_pack.ZoQQ3s/_new 2026-06-13 18:49:46.967524878 +0200 @@ -1,7 +1,7 @@ # # spec file for package perl-Plack # -# Copyright (c) 2024 SUSE LLC +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,54 +18,55 @@ %define cpan_name Plack Name: perl-Plack -Version: 1.0051 +Version: 1.0054 Release: 0 License: Artistic-1.0 OR GPL-1.0-or-later Summary: Perl Superglue for Web frameworks and Web Servers (PSGI toolkit) URL: https://metacpan.org/release/%{cpan_name} Source0: https://cpan.metacpan.org/authors/id/M/MI/MIYAGAWA/%{cpan_name}-%{version}.tar.gz Source1: cpanspec.yml +Source100: README.md BuildArch: noarch BuildRequires: perl BuildRequires: perl-macros -BuildRequires: perl(Apache::LogFormat::Compiler) >= 0.33 -BuildRequires: perl(Cookie::Baker) >= 0.07 -BuildRequires: perl(Devel::StackTrace) >= 1.23 -BuildRequires: perl(Devel::StackTrace::AsHTML) >= 0.11 -BuildRequires: perl(File::ShareDir) >= 1.00 -BuildRequires: perl(File::ShareDir::Install) >= 0.06 +BuildRequires: perl(Apache::LogFormat::Compiler) >= 0.330 +BuildRequires: perl(Cookie::Baker) >= 0.70 +BuildRequires: perl(Devel::StackTrace) >= 1.230 +BuildRequires: perl(Devel::StackTrace::AsHTML) >= 0.110 +BuildRequires: perl(File::ShareDir) >= 1.0 +BuildRequires: perl(File::ShareDir::Install) >= 0.60 BuildRequires: perl(Filesys::Notify::Simple) -BuildRequires: perl(HTTP::Entity::Parser) >= 0.25 -BuildRequires: perl(HTTP::Headers::Fast) >= 0.18 +BuildRequires: perl(HTTP::Entity::Parser) >= 0.250 +BuildRequires: perl(HTTP::Headers::Fast) >= 0.180 BuildRequires: perl(HTTP::Message) >= 5.814 BuildRequires: perl(HTTP::Tiny) >= 0.034 -BuildRequires: perl(Hash::MultiValue) >= 0.05 +BuildRequires: perl(Hash::MultiValue) >= 0.50 BuildRequires: perl(Pod::Usage) >= 1.36 -BuildRequires: perl(Stream::Buffered) >= 0.02 +BuildRequires: perl(Stream::Buffered) >= 0.20 BuildRequires: perl(Test::More) >= 0.88 BuildRequires: perl(Test::Requires) -BuildRequires: perl(Test::TCP) >= 2.15 +BuildRequires: perl(Test::TCP) >= 2.150 BuildRequires: perl(Try::Tiny) -BuildRequires: perl(URI) >= 1.59 -BuildRequires: perl(WWW::Form::UrlEncoded) >= 0.23 +BuildRequires: perl(URI) >= 1.590 +BuildRequires: perl(WWW::Form::UrlEncoded) >= 0.230 BuildRequires: perl(parent) -Requires: perl(Apache::LogFormat::Compiler) >= 0.33 -Requires: perl(Cookie::Baker) >= 0.07 -Requires: perl(Devel::StackTrace) >= 1.23 -Requires: perl(Devel::StackTrace::AsHTML) >= 0.11 -Requires: perl(File::ShareDir) >= 1.00 +Requires: perl(Apache::LogFormat::Compiler) >= 0.330 +Requires: perl(Cookie::Baker) >= 0.70 +Requires: perl(Devel::StackTrace) >= 1.230 +Requires: perl(Devel::StackTrace::AsHTML) >= 0.110 +Requires: perl(File::ShareDir) >= 1.0 Requires: perl(Filesys::Notify::Simple) -Requires: perl(HTTP::Entity::Parser) >= 0.25 -Requires: perl(HTTP::Headers::Fast) >= 0.18 +Requires: perl(HTTP::Entity::Parser) >= 0.250 +Requires: perl(HTTP::Headers::Fast) >= 0.180 Requires: perl(HTTP::Message) >= 5.814 Requires: perl(HTTP::Tiny) >= 0.034 -Requires: perl(Hash::MultiValue) >= 0.05 +Requires: perl(Hash::MultiValue) >= 0.50 Requires: perl(Pod::Usage) >= 1.36 -Requires: perl(Stream::Buffered) >= 0.02 -Requires: perl(Test::TCP) >= 2.15 +Requires: perl(Stream::Buffered) >= 0.20 +Requires: perl(Test::TCP) >= 2.150 Requires: perl(Try::Tiny) -Requires: perl(URI) >= 1.59 -Requires: perl(WWW::Form::UrlEncoded) >= 0.23 +Requires: perl(URI) >= 1.590 +Requires: perl(WWW::Form::UrlEncoded) >= 0.230 Requires: perl(parent) %{perl_requires} @@ -78,7 +79,7 @@ Plack are and why we need them. %prep -%autosetup -n %{cpan_name}-%{version} +%autosetup -n %{cpan_name}-%{version} -p1 find . -type f ! -path "*/t/*" ! -name "*.pl" ! -path "*/bin/*" ! -path "*/script/*" ! -path "*/scripts/*" ! -name "configure" -print0 | xargs -0 chmod 644 ++++++ Plack-1.0051.tar.gz -> Plack-1.0054.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Plack-1.0051/Changes new/Plack-1.0054/Changes --- old/Plack-1.0051/Changes 2024-01-06 00:09:39.000000000 +0100 +++ new/Plack-1.0054/Changes 2026-05-05 08:38:14.000000000 +0200 @@ -1,5 +1,26 @@ Go to http://github.com/plack/Plack/issues for the roadmap and known issues. +1.0054 2026-05-04 23:38:13 PDT + [BUG FIXES] + - Revert Plack::App::File REQUEST_METHOD check after locating file due to regression #725 + +1.0053 2026-04-28 15:59:58 PDT + [DEPRECATIONS] + - Plack::Middleware::XSendfile is deprecated due to security design issues; see POD for migration examples + + [BUG FIXES] + - Plack::App::File now checks REQUEST_METHOD after locating the file #681 + +1.0052 2026-04-27 12:59:19 PDT + [BUG FIXES] + - stat already open filehandle rather than filename in Plack::App::File #716 + + [IMPROVEMENTS] + - Updated MIME type list in Plack::MIME sourced from rack/rack #706 + - Avoid try block just for checking $object->isa in HTTP::Message::PSGI #712 + - Remove the last remaining uses of base.pm #707 + - Document security trust model and frontend configuration for XSendfile middleware + 1.0051 2024-01-05 15:09:37 PST [BUG FIXES] - Fix a bug where $req->headers can pick up non-PSGI header values from environment #703 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Plack-1.0051/META.json new/Plack-1.0054/META.json --- old/Plack-1.0051/META.json 2024-01-06 00:09:39.000000000 +0100 +++ new/Plack-1.0054/META.json 2026-05-05 08:38:14.000000000 +0200 @@ -4,7 +4,7 @@ "Tatsuhiko Miyagawa" ], "dynamic_config" : 0, - "generated_by" : "Dist::Milla version v1.0.22, Dist::Zilla version 6.025, CPAN::Meta::Converter version 2.150010", + "generated_by" : "Dist::Milla version v1.0.22, Dist::Zilla version 6.025, CPAN::Meta::Converter version 2.150013", "license" : [ "perl_5" ], @@ -102,7 +102,7 @@ "web" : "https://github.com/plack/Plack" } }, - "version" : "1.0051", + "version" : "1.0054", "x_authority" : "cpan:MIYAGAWA", "x_contributors" : [ "Aaron Trevena <[email protected]>", @@ -119,6 +119,7 @@ "Asato Wakisaka <[email protected]>", "Ashley Pond V <[email protected]>", "Ask Bj\u00f8rn Hansen <[email protected]>", + "bbrtj <[email protected]>", "ben hengst <[email protected]>", "Ben Morrow <[email protected]>", "Bernhard Graf <[email protected]>", @@ -185,6 +186,7 @@ "Mark Stosberg <[email protected]>", "Masahiro Chiba <[email protected]>", "Masahiro Nagano <[email protected]>", + "Maurice Aubrey <[email protected]>", "Michael G. Schwern <[email protected]>", "Michael R. Davis <[email protected]>", "Michal Josef \u0160pa\u010dek <[email protected]>", @@ -192,6 +194,7 @@ "Narsimham Chelluri <[email protected]>", "Narsimham Chelluri <[email protected]>", "Nick Wellnhofer <[email protected]>", + "Nitesh Yadav <[email protected]>", "Nobuo Danjou <[email protected]>", "Olaf Alders <[email protected]>", "Oliver Gorwits <[email protected]>", @@ -209,6 +212,7 @@ "punytan <[email protected]>", "Rafael Kitover <[email protected]>", "Randy Stauner <[email protected]>", + "Rawley <[email protected]>", "Ray Miller <[email protected]>", "Richard Sim\u00f5es <[email protected]>", "Ricky Morse <[email protected]>", @@ -241,6 +245,7 @@ "xaicron <[email protected]>", "Yann Kerherve <[email protected]>", "yappo <[email protected]>", + "Yoshikazu Sawa <[email protected]>", "Yury Zavarin <[email protected]>", "Yuval Kogman <[email protected]>", "\u5510\u9cf3 <[email protected]>" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Plack-1.0051/META.yml new/Plack-1.0054/META.yml --- old/Plack-1.0051/META.yml 2024-01-06 00:09:39.000000000 +0100 +++ new/Plack-1.0054/META.yml 2026-05-05 08:38:14.000000000 +0200 @@ -9,7 +9,7 @@ ExtUtils::MakeMaker: '0' File::ShareDir::Install: '0.06' dynamic_config: 0 -generated_by: 'Dist::Milla version v1.0.22, Dist::Zilla version 6.025, CPAN::Meta::Converter version 2.150010' +generated_by: 'Dist::Milla version v1.0.22, Dist::Zilla version 6.025, CPAN::Meta::Converter version 2.150013' license: perl meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html @@ -47,7 +47,7 @@ bugtracker: https://github.com/plack/Plack/issues homepage: https://github.com/plack/Plack repository: https://github.com/plack/Plack.git -version: '1.0051' +version: '1.0054' x_authority: cpan:MIYAGAWA x_contributors: - 'Aaron Trevena <[email protected]>' @@ -64,6 +64,7 @@ - 'Asato Wakisaka <[email protected]>' - 'Ashley Pond V <[email protected]>' - 'Ask Bjørn Hansen <[email protected]>' + - 'bbrtj <[email protected]>' - 'ben hengst <[email protected]>' - 'Ben Morrow <[email protected]>' - 'Bernhard Graf <[email protected]>' @@ -130,6 +131,7 @@ - 'Mark Stosberg <[email protected]>' - 'Masahiro Chiba <[email protected]>' - 'Masahiro Nagano <[email protected]>' + - 'Maurice Aubrey <[email protected]>' - 'Michael G. Schwern <[email protected]>' - 'Michael R. Davis <[email protected]>' - 'Michal Josef Špaček <[email protected]>' @@ -137,6 +139,7 @@ - 'Narsimham Chelluri <[email protected]>' - 'Narsimham Chelluri <[email protected]>' - 'Nick Wellnhofer <[email protected]>' + - 'Nitesh Yadav <[email protected]>' - 'Nobuo Danjou <[email protected]>' - 'Olaf Alders <[email protected]>' - 'Oliver Gorwits <[email protected]>' @@ -154,6 +157,7 @@ - 'punytan <[email protected]>' - 'Rafael Kitover <[email protected]>' - 'Randy Stauner <[email protected]>' + - 'Rawley <[email protected]>' - 'Ray Miller <[email protected]>' - 'Richard Simões <[email protected]>' - 'Ricky Morse <[email protected]>' @@ -186,10 +190,11 @@ - 'xaicron <[email protected]>' - 'Yann Kerherve <[email protected]>' - 'yappo <[email protected]>' + - 'Yoshikazu Sawa <[email protected]>' - 'Yury Zavarin <[email protected]>' - 'Yuval Kogman <[email protected]>' - '唐鳳 <[email protected]>' x_generated_by_perl: v5.34.1 -x_serialization_backend: 'YAML::Tiny version 1.73' +x_serialization_backend: 'YAML::Tiny version 1.76' x_spdx_expression: 'Artistic-1.0-Perl OR GPL-1.0-or-later' x_static_install: 1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Plack-1.0051/Makefile.PL new/Plack-1.0054/Makefile.PL --- old/Plack-1.0051/Makefile.PL 2024-01-06 00:09:39.000000000 +0100 +++ new/Plack-1.0054/Makefile.PL 2026-05-05 08:38:14.000000000 +0200 @@ -50,7 +50,7 @@ "Test::More" => "0.88", "Test::Requires" => 0 }, - "VERSION" => "1.0051", + "VERSION" => "1.0054", "test" => { "TESTS" => "t/*.t t/HTTP-Message-PSGI/*.t t/HTTP-Server-PSGI/*.t t/Plack-Builder/*.t t/Plack-HTTPParser-PP/*.t t/Plack-Handler/*.t t/Plack-Loader/*.t t/Plack-MIME/*.t t/Plack-Middleware/*.t t/Plack-Middleware/cascade/*.t t/Plack-Middleware/recursive/*.t t/Plack-Middleware/stacktrace/*.t t/Plack-Request/*.t t/Plack-Response/*.t t/Plack-Runner/*.t t/Plack-TempBuffer/*.t t/Plack-Test/*.t t/Plack-Util/*.t" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Plack-1.0051/lib/HTTP/Message/PSGI.pm new/Plack-1.0054/lib/HTTP/Message/PSGI.pm --- old/Plack-1.0051/lib/HTTP/Message/PSGI.pm 2024-01-06 00:09:39.000000000 +0100 +++ new/Plack-1.0054/lib/HTTP/Message/PSGI.pm 2026-05-05 08:38:14.000000000 +0200 @@ -8,7 +8,7 @@ use HTTP::Status qw(status_message); use URI::Escape (); use Plack::Util; -use Try::Tiny; +use Scalar::Util (); my $TRUE = (1 == 1); my $FALSE = !$TRUE; @@ -16,7 +16,7 @@ sub req_to_psgi { my $req = shift; - unless (try { $req->isa('HTTP::Request') }) { + unless (Scalar::Util::blessed($req) && $req->isa('HTTP::Request')) { Carp::croak("Request is not HTTP::Request: $req"); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Plack-1.0051/lib/Plack/App/Cascade.pm new/Plack-1.0054/lib/Plack/App/Cascade.pm --- old/Plack-1.0051/lib/Plack/App/Cascade.pm 2024-01-06 00:09:39.000000000 +0100 +++ new/Plack-1.0054/lib/Plack/App/Cascade.pm 2026-05-05 08:38:14.000000000 +0200 @@ -1,6 +1,6 @@ package Plack::App::Cascade; use strict; -use base qw(Plack::Component); +use parent qw(Plack::Component); use Plack::Util; use Plack::Util::Accessor qw(apps catch codes); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Plack-1.0051/lib/Plack/App/File.pm new/Plack-1.0054/lib/Plack/App/File.pm --- old/Plack-1.0051/lib/Plack/App/File.pm 2024-01-06 00:09:39.000000000 +0100 +++ new/Plack-1.0054/lib/Plack/App/File.pm 2026-05-05 08:38:14.000000000 +0200 @@ -97,7 +97,7 @@ open my $fh, "<:raw", $file or return $self->return_403; - my @stat = stat $file; + my @stat = stat $fh; Plack::Util::set_io_path($fh, Cwd::realpath($file)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Plack-1.0051/lib/Plack/MIME.pm new/Plack-1.0054/lib/Plack/MIME.pm --- old/Plack-1.0051/lib/Plack/MIME.pm 2024-01-06 00:09:39.000000000 +0100 +++ new/Plack-1.0054/lib/Plack/MIME.pm 2026-05-05 08:38:14.000000000 +0200 @@ -3,179 +3,646 @@ # stolen from rack.mime.rb our $MIME_TYPES = { - ".3gp" => "video/3gpp", - ".a" => "application/octet-stream", - ".ai" => "application/postscript", - ".aif" => "audio/x-aiff", - ".aiff" => "audio/x-aiff", - ".apk" => "application/vnd.android.package-archive", - ".asc" => "application/pgp-signature", - ".asf" => "video/x-ms-asf", - ".asm" => "text/x-asm", - ".asx" => "video/x-ms-asf", - ".atom" => "application/atom+xml", - ".au" => "audio/basic", - ".avi" => "video/x-msvideo", - ".bat" => "application/x-msdownload", - ".bin" => "application/octet-stream", - ".bmp" => "image/bmp", - ".bz2" => "application/x-bzip2", - ".c" => "text/x-c", - ".cab" => "application/vnd.ms-cab-compressed", - ".cc" => "text/x-c", - ".chm" => "application/vnd.ms-htmlhelp", - ".class" => "application/octet-stream", - ".com" => "application/x-msdownload", - ".conf" => "text/plain", - ".cpp" => "text/x-c", - ".crt" => "application/x-x509-ca-cert", - ".css" => "text/css", - ".csv" => "text/csv", - ".cxx" => "text/x-c", - ".deb" => "application/x-debian-package", - ".der" => "application/x-x509-ca-cert", - ".diff" => "text/x-diff", - ".djv" => "image/vnd.djvu", - ".djvu" => "image/vnd.djvu", - ".dll" => "application/x-msdownload", - ".dmg" => "application/octet-stream", - ".doc" => "application/msword", - ".dot" => "application/msword", - ".dtd" => "application/xml-dtd", - ".dvi" => "application/x-dvi", - ".ear" => "application/java-archive", - ".eml" => "message/rfc822", - ".eps" => "application/postscript", - ".exe" => "application/x-msdownload", - ".f" => "text/x-fortran", - ".f77" => "text/x-fortran", - ".f90" => "text/x-fortran", - ".flv" => "video/x-flv", - ".for" => "text/x-fortran", - ".gem" => "application/octet-stream", - ".gemspec" => "text/x-script.ruby", - ".gif" => "image/gif", - ".gz" => "application/x-gzip", - ".h" => "text/x-c", - ".hh" => "text/x-c", - ".htm" => "text/html", - ".html" => "text/html", - ".ico" => "image/vnd.microsoft.icon", - ".ics" => "text/calendar", - ".ifb" => "text/calendar", - ".iso" => "application/octet-stream", - ".jar" => "application/java-archive", - ".java" => "text/x-java-source", - ".jnlp" => "application/x-java-jnlp-file", - ".jpeg" => "image/jpeg", - ".jpg" => "image/jpeg", - ".js" => "application/javascript", - ".json" => "application/json", - ".log" => "text/plain", - ".m3u" => "audio/x-mpegurl", - ".m4v" => "video/mp4", - ".man" => "text/troff", - ".manifest"=> "text/cache-manifest", - ".mathml" => "application/mathml+xml", - ".mbox" => "application/mbox", - ".mdoc" => "text/troff", - ".me" => "text/troff", - ".mid" => "audio/midi", - ".midi" => "audio/midi", - ".mime" => "message/rfc822", - ".mml" => "application/mathml+xml", - ".mng" => "video/x-mng", - ".mov" => "video/quicktime", - ".mp3" => "audio/mpeg", - ".mp4" => "video/mp4", - ".mp4v" => "video/mp4", - ".mpeg" => "video/mpeg", - ".mpg" => "video/mpeg", - ".ms" => "text/troff", - ".msi" => "application/x-msdownload", - ".odp" => "application/vnd.oasis.opendocument.presentation", - ".ods" => "application/vnd.oasis.opendocument.spreadsheet", - ".odt" => "application/vnd.oasis.opendocument.text", - ".ogg" => "application/ogg", - ".ogv" => "video/ogg", - ".p" => "text/x-pascal", - ".pas" => "text/x-pascal", - ".pbm" => "image/x-portable-bitmap", - ".pdf" => "application/pdf", - ".pem" => "application/x-x509-ca-cert", - ".pgm" => "image/x-portable-graymap", - ".pgp" => "application/pgp-encrypted", - ".pkg" => "application/octet-stream", - ".pl" => "text/x-script.perl", - ".pm" => "text/x-script.perl-module", - ".png" => "image/png", - ".pnm" => "image/x-portable-anymap", - ".ppm" => "image/x-portable-pixmap", - ".pps" => "application/vnd.ms-powerpoint", - ".ppt" => "application/vnd.ms-powerpoint", - ".ps" => "application/postscript", - ".psd" => "image/vnd.adobe.photoshop", - ".py" => "text/x-script.python", - ".qt" => "video/quicktime", - ".ra" => "audio/x-pn-realaudio", - ".rake" => "text/x-script.ruby", - ".ram" => "audio/x-pn-realaudio", - ".rar" => "application/x-rar-compressed", - ".rb" => "text/x-script.ruby", - ".rdf" => "application/rdf+xml", - ".roff" => "text/troff", - ".rpm" => "application/x-redhat-package-manager", - ".rss" => "application/rss+xml", - ".rtf" => "application/rtf", - ".ru" => "text/x-script.ruby", - ".s" => "text/x-asm", - ".sgm" => "text/sgml", - ".sgml" => "text/sgml", - ".sh" => "application/x-sh", - ".sig" => "application/pgp-signature", - ".snd" => "audio/basic", - ".so" => "application/octet-stream", - ".svg" => "image/svg+xml", - ".svgz" => "image/svg+xml", - ".swf" => "application/x-shockwave-flash", - ".t" => "text/troff", - ".tar" => "application/x-tar", - ".tbz" => "application/x-bzip-compressed-tar", - ".tcl" => "application/x-tcl", - ".tex" => "application/x-tex", - ".texi" => "application/x-texinfo", - ".texinfo" => "application/x-texinfo", - ".text" => "text/plain", - ".tif" => "image/tiff", - ".tiff" => "image/tiff", - ".torrent" => "application/x-bittorrent", - ".tr" => "text/troff", - ".ttf" => "font/ttf", - ".txt" => "text/plain", - ".vcf" => "text/x-vcard", - ".vcs" => "text/x-vcalendar", - ".vrml" => "model/vrml", - ".war" => "application/java-archive", - ".wav" => "audio/x-wav", - ".webm" => "video/webm", - ".webp" => "image/webp", - ".wma" => "audio/x-ms-wma", - ".wmv" => "video/x-ms-wmv", - ".wmx" => "video/x-ms-wmx", - ".woff" => "application/font-woff", - ".wrl" => "model/vrml", - ".wsdl" => "application/wsdl+xml", - ".xbm" => "image/x-xbitmap", - ".xhtml" => "application/xhtml+xml", - ".xls" => "application/vnd.ms-excel", - ".xlsx" => "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", - ".xml" => "application/xml", - ".xpm" => "image/x-xpixmap", - ".xsl" => "application/xml", - ".xslt" => "application/xslt+xml", - ".yaml" => "text/yaml", - ".yml" => "text/yaml", - ".zip" => "application/zip", + ".123" => "application/vnd.lotus-1-2-3", + ".3dml" => "text/vnd.in3d.3dml", + ".3g2" => "video/3gpp2", + ".3gp" => "video/3gpp", + ".a" => "application/octet-stream", + ".acc" => "application/vnd.americandynamics.acc", + ".ace" => "application/x-ace-compressed", + ".acu" => "application/vnd.acucobol", + ".aep" => "application/vnd.audiograph", + ".afp" => "application/vnd.ibm.modcap", + ".ai" => "application/postscript", + ".aif" => "audio/x-aiff", + ".aiff" => "audio/x-aiff", + ".ami" => "application/vnd.amiga.ami", + ".apng" => "image/apng", + ".appcache" => "text/cache-manifest", + ".apr" => "application/vnd.lotus-approach", + ".asc" => "application/pgp-signature", + ".asf" => "video/x-ms-asf", + ".asm" => "text/x-asm", + ".aso" => "application/vnd.accpac.simply.aso", + ".asx" => "video/x-ms-asf", + ".atc" => "application/vnd.acucorp", + ".atom" => "application/atom+xml", + ".atomcat" => "application/atomcat+xml", + ".atomsvc" => "application/atomsvc+xml", + ".atx" => "application/vnd.antix.game-component", + ".au" => "audio/basic", + ".avi" => "video/x-msvideo", + ".avif" => "image/avif", + ".bat" => "application/x-msdownload", + ".bcpio" => "application/x-bcpio", + ".bdm" => "application/vnd.syncml.dm+wbxml", + ".bh2" => "application/vnd.fujitsu.oasysprs", + ".bin" => "application/octet-stream", + ".bmi" => "application/vnd.bmi", + ".bmp" => "image/bmp", + ".box" => "application/vnd.previewsystems.box", + ".btif" => "image/prs.btif", + ".bz" => "application/x-bzip", + ".bz2" => "application/x-bzip2", + ".c" => "text/x-c", + ".c4g" => "application/vnd.clonk.c4group", + ".cab" => "application/vnd.ms-cab-compressed", + ".cc" => "text/x-c", + ".ccxml" => "application/ccxml+xml", + ".cdbcmsg" => "application/vnd.contact.cmsg", + ".cdkey" => "application/vnd.mediastation.cdkey", + ".cdx" => "chemical/x-cdx", + ".cdxml" => "application/vnd.chemdraw+xml", + ".cdy" => "application/vnd.cinderella", + ".cer" => "application/pkix-cert", + ".cgm" => "image/cgm", + ".chat" => "application/x-chat", + ".chm" => "application/vnd.ms-htmlhelp", + ".chrt" => "application/vnd.kde.kchart", + ".cif" => "chemical/x-cif", + ".cii" => "application/vnd.anser-web-certificate-issue-initiation", + ".cil" => "application/vnd.ms-artgalry", + ".cla" => "application/vnd.claymore", + ".class" => "application/octet-stream", + ".clkk" => "application/vnd.crick.clicker.keyboard", + ".clkp" => "application/vnd.crick.clicker.palette", + ".clkt" => "application/vnd.crick.clicker.template", + ".clkw" => "application/vnd.crick.clicker.wordbank", + ".clkx" => "application/vnd.crick.clicker", + ".clp" => "application/x-msclip", + ".cmc" => "application/vnd.cosmocaller", + ".cmdf" => "chemical/x-cmdf", + ".cml" => "chemical/x-cml", + ".cmp" => "application/vnd.yellowriver-custom-menu", + ".cmx" => "image/x-cmx", + ".com" => "application/x-msdownload", + ".conf" => "text/plain", + ".cpio" => "application/x-cpio", + ".cpp" => "text/x-c", + ".cpt" => "application/mac-compactpro", + ".crd" => "application/x-mscardfile", + ".crl" => "application/pkix-crl", + ".crt" => "application/x-x509-ca-cert", + ".csh" => "application/x-csh", + ".csml" => "chemical/x-csml", + ".csp" => "application/vnd.commonspace", + ".css" => "text/css", + ".csv" => "text/csv", + ".curl" => "application/vnd.curl", + ".cww" => "application/prs.cww", + ".cxx" => "text/x-c", + ".daf" => "application/vnd.mobius.daf", + ".davmount" => "application/davmount+xml", + ".dcr" => "application/x-director", + ".dd2" => "application/vnd.oma.dd2+xml", + ".ddd" => "application/vnd.fujixerox.ddd", + ".deb" => "application/x-debian-package", + ".der" => "application/x-x509-ca-cert", + ".dfac" => "application/vnd.dreamfactory", + ".diff" => "text/x-diff", + ".dis" => "application/vnd.mobius.dis", + ".djv" => "image/vnd.djvu", + ".djvu" => "image/vnd.djvu", + ".dll" => "application/x-msdownload", + ".dmg" => "application/octet-stream", + ".dna" => "application/vnd.dna", + ".doc" => "application/msword", + ".docm" => "application/vnd.ms-word.document.macroEnabled.12", + ".docx" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + ".dot" => "application/msword", + ".dotm" => "application/vnd.ms-word.template.macroEnabled.12", + ".dotx" => "application/vnd.openxmlformats-officedocument.wordprocessingml.template", + ".dp" => "application/vnd.osgi.dp", + ".dpg" => "application/vnd.dpgraph", + ".dsc" => "text/prs.lines.tag", + ".dtd" => "application/xml-dtd", + ".dts" => "audio/vnd.dts", + ".dtshd" => "audio/vnd.dts.hd", + ".dv" => "video/x-dv", + ".dvi" => "application/x-dvi", + ".dwf" => "model/vnd.dwf", + ".dwg" => "image/vnd.dwg", + ".dxf" => "image/vnd.dxf", + ".dxp" => "application/vnd.spotfire.dxp", + ".ear" => "application/java-archive", + ".ecelp4800" => "audio/vnd.nuera.ecelp4800", + ".ecelp7470" => "audio/vnd.nuera.ecelp7470", + ".ecelp9600" => "audio/vnd.nuera.ecelp9600", + ".ecma" => "application/ecmascript", + ".edm" => "application/vnd.novadigm.edm", + ".edx" => "application/vnd.novadigm.edx", + ".efif" => "application/vnd.picsel", + ".ei6" => "application/vnd.pg.osasli", + ".eml" => "message/rfc822", + ".eol" => "audio/vnd.digital-winds", + ".eot" => "application/vnd.ms-fontobject", + ".eps" => "application/postscript", + ".es3" => "application/vnd.eszigno3+xml", + ".esf" => "application/vnd.epson.esf", + ".etx" => "text/x-setext", + ".exe" => "application/x-msdownload", + ".ext" => "application/vnd.novadigm.ext", + ".ez" => "application/andrew-inset", + ".ez2" => "application/vnd.ezpix-album", + ".ez3" => "application/vnd.ezpix-package", + ".f" => "text/x-fortran", + ".f77" => "text/x-fortran", + ".f90" => "text/x-fortran", + ".fbs" => "image/vnd.fastbidsheet", + ".fdf" => "application/vnd.fdf", + ".fe_launch" => "application/vnd.denovo.fcselayout-link", + ".fg5" => "application/vnd.fujitsu.oasysgp", + ".fli" => "video/x-fli", + ".flif" => "image/flif", + ".flo" => "application/vnd.micrografx.flo", + ".flv" => "video/x-flv", + ".flw" => "application/vnd.kde.kivio", + ".flx" => "text/vnd.fmi.flexstor", + ".fly" => "text/vnd.fly", + ".fm" => "application/vnd.framemaker", + ".fnc" => "application/vnd.frogans.fnc", + ".for" => "text/x-fortran", + ".fpx" => "image/vnd.fpx", + ".fsc" => "application/vnd.fsc.weblaunch", + ".fst" => "image/vnd.fst", + ".ftc" => "application/vnd.fluxtime.clip", + ".fti" => "application/vnd.anser-web-funds-transfer-initiation", + ".fvt" => "video/vnd.fvt", + ".fzs" => "application/vnd.fuzzysheet", + ".g3" => "image/g3fax", + ".gac" => "application/vnd.groove-account", + ".gdl" => "model/vnd.gdl", + ".gem" => "application/octet-stream", + ".gemspec" => "text/x-script.ruby", + ".ghf" => "application/vnd.groove-help", + ".gif" => "image/gif", + ".gim" => "application/vnd.groove-identity-message", + ".gmx" => "application/vnd.gmx", + ".gph" => "application/vnd.flographit", + ".gqf" => "application/vnd.grafeq", + ".gram" => "application/srgs", + ".grv" => "application/vnd.groove-injector", + ".grxml" => "application/srgs+xml", + ".gtar" => "application/x-gtar", + ".gtm" => "application/vnd.groove-tool-message", + ".gtw" => "model/vnd.gtw", + ".gv" => "text/vnd.graphviz", + ".gz" => "application/x-gzip", + ".h" => "text/x-c", + ".h261" => "video/h261", + ".h263" => "video/h263", + ".h264" => "video/h264", + ".hbci" => "application/vnd.hbci", + ".hdf" => "application/x-hdf", + ".heic" => "image/heic", + ".heics" => "image/heic-sequence", + ".heif" => "image/heif", + ".heifs" => "image/heif-sequence", + ".hh" => "text/x-c", + ".hlp" => "application/winhlp", + ".hpgl" => "application/vnd.hp-hpgl", + ".hpid" => "application/vnd.hp-hpid", + ".hps" => "application/vnd.hp-hps", + ".hqx" => "application/mac-binhex40", + ".htc" => "text/x-component", + ".htke" => "application/vnd.kenameaapp", + ".htm" => "text/html", + ".html" => "text/html", + ".hvd" => "application/vnd.yamaha.hv-dic", + ".hvp" => "application/vnd.yamaha.hv-voice", + ".hvs" => "application/vnd.yamaha.hv-script", + ".icc" => "application/vnd.iccprofile", + ".ice" => "x-conference/x-cooltalk", + ".ico" => "image/vnd.microsoft.icon", + ".ics" => "text/calendar", + ".ief" => "image/ief", + ".ifb" => "text/calendar", + ".ifm" => "application/vnd.shana.informed.formdata", + ".igl" => "application/vnd.igloader", + ".igs" => "model/iges", + ".igx" => "application/vnd.micrografx.igx", + ".iif" => "application/vnd.shana.informed.interchange", + ".imp" => "application/vnd.accpac.simply.imp", + ".ims" => "application/vnd.ms-ims", + ".ipk" => "application/vnd.shana.informed.package", + ".irm" => "application/vnd.ibm.rights-management", + ".irp" => "application/vnd.irepository.package+xml", + ".iso" => "application/octet-stream", + ".itp" => "application/vnd.shana.informed.formtemplate", + ".ivp" => "application/vnd.immervision-ivp", + ".ivu" => "application/vnd.immervision-ivu", + ".jad" => "text/vnd.sun.j2me.app-descriptor", + ".jam" => "application/vnd.jam", + ".jar" => "application/java-archive", + ".java" => "text/x-java-source", + ".jisp" => "application/vnd.jisp", + ".jlt" => "application/vnd.hp-jlyt", + ".jnlp" => "application/x-java-jnlp-file", + ".joda" => "application/vnd.joost.joda-archive", + ".jp2" => "image/jp2", + ".jpeg" => "image/jpeg", + ".jpg" => "image/jpeg", + ".jpgv" => "video/jpeg", + ".jpm" => "video/jpm", + ".js" => "text/javascript", + ".json" => "application/json", + ".karbon" => "application/vnd.kde.karbon", + ".kfo" => "application/vnd.kde.kformula", + ".kia" => "application/vnd.kidspiration", + ".kml" => "application/vnd.google-earth.kml+xml", + ".kmz" => "application/vnd.google-earth.kmz", + ".kne" => "application/vnd.kinar", + ".kon" => "application/vnd.kde.kontour", + ".kpr" => "application/vnd.kde.kpresenter", + ".ksp" => "application/vnd.kde.kspread", + ".ktz" => "application/vnd.kahootz", + ".kwd" => "application/vnd.kde.kword", + ".latex" => "application/x-latex", + ".lbd" => "application/vnd.llamagraphics.life-balance.desktop", + ".lbe" => "application/vnd.llamagraphics.life-balance.exchange+xml", + ".les" => "application/vnd.hhe.lesson-player", + ".link66" => "application/vnd.route66.link66+xml", + ".log" => "text/plain", + ".lostxml" => "application/lost+xml", + ".lrm" => "application/vnd.ms-lrm", + ".ltf" => "application/vnd.frogans.ltf", + ".lvp" => "audio/vnd.lucent.voice", + ".lwp" => "application/vnd.lotus-wordpro", + ".m3u" => "audio/x-mpegurl", + ".m3u8" => "application/x-mpegurl", + ".m4a" => "audio/mp4a-latm", + ".m4v" => "video/mp4", + ".ma" => "application/mathematica", + ".mag" => "application/vnd.ecowin.chart", + ".man" => "text/troff", + ".manifest" => "text/cache-manifest", + ".mathml" => "application/mathml+xml", + ".mbk" => "application/vnd.mobius.mbk", + ".mbox" => "application/mbox", + ".mc1" => "application/vnd.medcalcdata", + ".mcd" => "application/vnd.mcd", + ".mdb" => "application/x-msaccess", + ".mdi" => "image/vnd.ms-modi", + ".mdoc" => "text/troff", + ".me" => "text/troff", + ".mfm" => "application/vnd.mfmp", + ".mgz" => "application/vnd.proteus.magazine", + ".mid" => "audio/midi", + ".midi" => "audio/midi", + ".mif" => "application/vnd.mif", + ".mime" => "message/rfc822", + ".mj2" => "video/mj2", + ".mjs" => "text/javascript", + ".mlp" => "application/vnd.dolby.mlp", + ".mmd" => "application/vnd.chipnuts.karaoke-mmd", + ".mmf" => "application/vnd.smaf", + ".mml" => "application/mathml+xml", + ".mmr" => "image/vnd.fujixerox.edmics-mmr", + ".mng" => "video/x-mng", + ".mny" => "application/x-msmoney", + ".mov" => "video/quicktime", + ".movie" => "video/x-sgi-movie", + ".mp3" => "audio/mpeg", + ".mp4" => "video/mp4", + ".mp4a" => "audio/mp4", + ".mp4s" => "application/mp4", + ".mp4v" => "video/mp4", + ".mpc" => "application/vnd.mophun.certificate", + ".mpd" => "application/dash+xml", + ".mpeg" => "video/mpeg", + ".mpg" => "video/mpeg", + ".mpga" => "audio/mpeg", + ".mpkg" => "application/vnd.apple.installer+xml", + ".mpm" => "application/vnd.blueice.multipass", + ".mpn" => "application/vnd.mophun.application", + ".mpp" => "application/vnd.ms-project", + ".mpy" => "application/vnd.ibm.minipay", + ".mqy" => "application/vnd.mobius.mqy", + ".mrc" => "application/marc", + ".ms" => "text/troff", + ".mscml" => "application/mediaservercontrol+xml", + ".mseq" => "application/vnd.mseq", + ".msf" => "application/vnd.epson.msf", + ".msh" => "model/mesh", + ".msi" => "application/x-msdownload", + ".msl" => "application/vnd.mobius.msl", + ".msty" => "application/vnd.muvee.style", + ".mts" => "model/vnd.mts", + ".mus" => "application/vnd.musician", + ".mvb" => "application/x-msmediaview", + ".mwf" => "application/vnd.mfer", + ".mxf" => "application/mxf", + ".mxl" => "application/vnd.recordare.musicxml", + ".mxml" => "application/xv+xml", + ".mxs" => "application/vnd.triscape.mxs", + ".mxu" => "video/vnd.mpegurl", + ".n" => "application/vnd.nokia.n-gage.symbian.install", + ".nc" => "application/x-netcdf", + ".ngdat" => "application/vnd.nokia.n-gage.data", + ".nlu" => "application/vnd.neurolanguage.nlu", + ".nml" => "application/vnd.enliven", + ".nnd" => "application/vnd.noblenet-directory", + ".nns" => "application/vnd.noblenet-sealer", + ".nnw" => "application/vnd.noblenet-web", + ".npx" => "image/vnd.net-fpx", + ".nsf" => "application/vnd.lotus-notes", + ".oa2" => "application/vnd.fujitsu.oasys2", + ".oa3" => "application/vnd.fujitsu.oasys3", + ".oas" => "application/vnd.fujitsu.oasys", + ".obd" => "application/x-msbinder", + ".oda" => "application/oda", + ".odc" => "application/vnd.oasis.opendocument.chart", + ".odf" => "application/vnd.oasis.opendocument.formula", + ".odg" => "application/vnd.oasis.opendocument.graphics", + ".odi" => "application/vnd.oasis.opendocument.image", + ".odp" => "application/vnd.oasis.opendocument.presentation", + ".ods" => "application/vnd.oasis.opendocument.spreadsheet", + ".odt" => "application/vnd.oasis.opendocument.text", + ".oga" => "audio/ogg", + ".ogg" => "application/ogg", + ".ogv" => "video/ogg", + ".ogx" => "application/ogg", + ".org" => "application/vnd.lotus-organizer", + ".otc" => "application/vnd.oasis.opendocument.chart-template", + ".otf" => "font/otf", + ".otg" => "application/vnd.oasis.opendocument.graphics-template", + ".oth" => "application/vnd.oasis.opendocument.text-web", + ".oti" => "application/vnd.oasis.opendocument.image-template", + ".otm" => "application/vnd.oasis.opendocument.text-master", + ".ots" => "application/vnd.oasis.opendocument.spreadsheet-template", + ".ott" => "application/vnd.oasis.opendocument.text-template", + ".oxt" => "application/vnd.openofficeorg.extension", + ".p" => "text/x-pascal", + ".p10" => "application/pkcs10", + ".p12" => "application/x-pkcs12", + ".p7b" => "application/x-pkcs7-certificates", + ".p7m" => "application/pkcs7-mime", + ".p7r" => "application/x-pkcs7-certreqresp", + ".p7s" => "application/pkcs7-signature", + ".pas" => "text/x-pascal", + ".pbd" => "application/vnd.powerbuilder6", + ".pbm" => "image/x-portable-bitmap", + ".pcl" => "application/vnd.hp-pcl", + ".pclxl" => "application/vnd.hp-pclxl", + ".pcx" => "image/x-pcx", + ".pdb" => "chemical/x-pdb", + ".pdf" => "application/pdf", + ".pem" => "application/x-x509-ca-cert", + ".pfr" => "application/font-tdpfr", + ".pgm" => "image/x-portable-graymap", + ".pgn" => "application/x-chess-pgn", + ".pgp" => "application/pgp-encrypted", + ".pic" => "image/x-pict", + ".pict" => "image/pict", + ".pkg" => "application/octet-stream", + ".pki" => "application/pkixcmp", + ".pkipath" => "application/pkix-pkipath", + ".pl" => "text/x-script.perl", + ".plb" => "application/vnd.3gpp.pic-bw-large", + ".plc" => "application/vnd.mobius.plc", + ".plf" => "application/vnd.pocketlearn", + ".pls" => "application/pls+xml", + ".pm" => "text/x-script.perl-module", + ".pml" => "application/vnd.ctc-posml", + ".png" => "image/png", + ".pnm" => "image/x-portable-anymap", + ".pntg" => "image/x-macpaint", + ".portpkg" => "application/vnd.macports.portpkg", + ".pot" => "application/vnd.ms-powerpoint", + ".potm" => "application/vnd.ms-powerpoint.template.macroEnabled.12", + ".potx" => "application/vnd.openxmlformats-officedocument.presentationml.template", + ".ppa" => "application/vnd.ms-powerpoint", + ".ppam" => "application/vnd.ms-powerpoint.addin.macroEnabled.12", + ".ppd" => "application/vnd.cups-ppd", + ".ppm" => "image/x-portable-pixmap", + ".pps" => "application/vnd.ms-powerpoint", + ".ppsm" => "application/vnd.ms-powerpoint.slideshow.macroEnabled.12", + ".ppsx" => "application/vnd.openxmlformats-officedocument.presentationml.slideshow", + ".ppt" => "application/vnd.ms-powerpoint", + ".pptm" => "application/vnd.ms-powerpoint.presentation.macroEnabled.12", + ".pptx" => "application/vnd.openxmlformats-officedocument.presentationml.presentation", + ".prc" => "application/vnd.palm", + ".pre" => "application/vnd.lotus-freelance", + ".prf" => "application/pics-rules", + ".ps" => "application/postscript", + ".psb" => "application/vnd.3gpp.pic-bw-small", + ".psd" => "image/vnd.adobe.photoshop", + ".ptid" => "application/vnd.pvi.ptid1", + ".pub" => "application/x-mspublisher", + ".pvb" => "application/vnd.3gpp.pic-bw-var", + ".pwn" => "application/vnd.3m.post-it-notes", + ".py" => "text/x-script.python", + ".pya" => "audio/vnd.ms-playready.media.pya", + ".pyv" => "video/vnd.ms-playready.media.pyv", + ".qam" => "application/vnd.epson.quickanime", + ".qbo" => "application/vnd.intu.qbo", + ".qfx" => "application/vnd.intu.qfx", + ".qps" => "application/vnd.publishare-delta-tree", + ".qt" => "video/quicktime", + ".qtif" => "image/x-quicktime", + ".qxd" => "application/vnd.quark.quarkxpress", + ".ra" => "audio/x-pn-realaudio", + ".rake" => "text/x-script.ruby", + ".ram" => "audio/x-pn-realaudio", + ".rar" => "application/x-rar-compressed", + ".ras" => "image/x-cmu-raster", + ".rb" => "text/x-script.ruby", + ".rcprofile" => "application/vnd.ipunplugged.rcprofile", + ".rdf" => "application/rdf+xml", + ".rdz" => "application/vnd.data-vision.rdz", + ".rep" => "application/vnd.businessobjects", + ".rgb" => "image/x-rgb", + ".rif" => "application/reginfo+xml", + ".rl" => "application/resource-lists+xml", + ".rlc" => "image/vnd.fujixerox.edmics-rlc", + ".rld" => "application/resource-lists-diff+xml", + ".rm" => "application/vnd.rn-realmedia", + ".rmp" => "audio/x-pn-realaudio-plugin", + ".rms" => "application/vnd.jcp.javame.midlet-rms", + ".rnc" => "application/relax-ng-compact-syntax", + ".roff" => "text/troff", + ".rpm" => "application/x-redhat-package-manager", + ".rpss" => "application/vnd.nokia.radio-presets", + ".rpst" => "application/vnd.nokia.radio-preset", + ".rq" => "application/sparql-query", + ".rs" => "application/rls-services+xml", + ".rsd" => "application/rsd+xml", + ".rss" => "application/rss+xml", + ".rtf" => "application/rtf", + ".rtx" => "text/richtext", + ".ru" => "text/x-script.ruby", + ".s" => "text/x-asm", + ".saf" => "application/vnd.yamaha.smaf-audio", + ".sbml" => "application/sbml+xml", + ".sc" => "application/vnd.ibm.secure-container", + ".scd" => "application/x-msschedule", + ".scm" => "application/vnd.lotus-screencam", + ".scq" => "application/scvp-cv-request", + ".scs" => "application/scvp-cv-response", + ".sdkm" => "application/vnd.solent.sdkm+xml", + ".sdp" => "application/sdp", + ".see" => "application/vnd.seemail", + ".sema" => "application/vnd.sema", + ".semd" => "application/vnd.semd", + ".semf" => "application/vnd.semf", + ".setpay" => "application/set-payment-initiation", + ".setreg" => "application/set-registration-initiation", + ".sfd" => "application/vnd.hydrostatix.sof-data", + ".sfs" => "application/vnd.spotfire.sfs", + ".sgm" => "text/sgml", + ".sgml" => "text/sgml", + ".sh" => "application/x-sh", + ".shar" => "application/x-shar", + ".shf" => "application/shf+xml", + ".sig" => "application/pgp-signature", + ".sit" => "application/x-stuffit", + ".sitx" => "application/x-stuffitx", + ".skp" => "application/vnd.koan", + ".slt" => "application/vnd.epson.salt", + ".smi" => "application/smil+xml", + ".snd" => "audio/basic", + ".so" => "application/octet-stream", + ".spf" => "application/vnd.yamaha.smaf-phrase", + ".spl" => "application/x-futuresplash", + ".spot" => "text/vnd.in3d.spot", + ".spp" => "application/scvp-vp-response", + ".spq" => "application/scvp-vp-request", + ".src" => "application/x-wais-source", + ".srt" => "text/srt", + ".srx" => "application/sparql-results+xml", + ".sse" => "application/vnd.kodak-descriptor", + ".ssf" => "application/vnd.epson.ssf", + ".ssml" => "application/ssml+xml", + ".stf" => "application/vnd.wt.stf", + ".stk" => "application/hyperstudio", + ".str" => "application/vnd.pg.format", + ".sus" => "application/vnd.sus-calendar", + ".sv4cpio" => "application/x-sv4cpio", + ".sv4crc" => "application/x-sv4crc", + ".svd" => "application/vnd.svd", + ".svg" => "image/svg+xml", + ".svgz" => "image/svg+xml", + ".swf" => "application/x-shockwave-flash", + ".swi" => "application/vnd.arastra.swi", + ".t" => "text/troff", + ".tao" => "application/vnd.tao.intent-module-archive", + ".tar" => "application/x-tar", + ".tbz" => "application/x-bzip-compressed-tar", + ".tcap" => "application/vnd.3gpp2.tcap", + ".tcl" => "application/x-tcl", + ".tex" => "application/x-tex", + ".texi" => "application/x-texinfo", + ".texinfo" => "application/x-texinfo", + ".text" => "text/plain", + ".tif" => "image/tiff", + ".tiff" => "image/tiff", + ".tmo" => "application/vnd.tmobile-livetv", + ".torrent" => "application/x-bittorrent", + ".tpl" => "application/vnd.groove-tool-template", + ".tpt" => "application/vnd.trid.tpt", + ".tr" => "text/troff", + ".tra" => "application/vnd.trueapp", + ".trm" => "application/x-msterminal", + ".ts" => "video/mp2t", + ".tsv" => "text/tab-separated-values", + ".ttf" => "font/ttf", + ".twd" => "application/vnd.simtech-mindmapper", + ".txd" => "application/vnd.genomatix.tuxedo", + ".txf" => "application/vnd.mobius.txf", + ".txt" => "text/plain", + ".ufd" => "application/vnd.ufdl", + ".umj" => "application/vnd.umajin", + ".unityweb" => "application/vnd.unity", + ".uoml" => "application/vnd.uoml+xml", + ".uri" => "text/uri-list", + ".ustar" => "application/x-ustar", + ".utz" => "application/vnd.uiq.theme", + ".uu" => "text/x-uuencode", + ".vcd" => "application/x-cdlink", + ".vcf" => "text/x-vcard", + ".vcg" => "application/vnd.groove-vcard", + ".vcs" => "text/x-vcalendar", + ".vcx" => "application/vnd.vcx", + ".vis" => "application/vnd.visionary", + ".viv" => "video/vnd.vivo", + ".vrml" => "model/vrml", + ".vsd" => "application/vnd.visio", + ".vsf" => "application/vnd.vsf", + ".vtt" => "text/vtt", + ".vtu" => "model/vnd.vtu", + ".vxml" => "application/voicexml+xml", + ".war" => "application/java-archive", + ".wasm" => "application/wasm", + ".wav" => "audio/x-wav", + ".wax" => "audio/x-ms-wax", + ".wbmp" => "image/vnd.wap.wbmp", + ".wbs" => "application/vnd.criticaltools.wbs+xml", + ".wbxml" => "application/vnd.wap.wbxml", + ".webm" => "video/webm", + ".webp" => "image/webp", + ".wm" => "video/x-ms-wm", + ".wma" => "audio/x-ms-wma", + ".wmd" => "application/x-ms-wmd", + ".wmf" => "application/x-msmetafile", + ".wml" => "text/vnd.wap.wml", + ".wmlc" => "application/vnd.wap.wmlc", + ".wmls" => "text/vnd.wap.wmlscript", + ".wmlsc" => "application/vnd.wap.wmlscriptc", + ".wmv" => "video/x-ms-wmv", + ".wmx" => "video/x-ms-wmx", + ".wmz" => "application/x-ms-wmz", + ".woff" => "font/woff", + ".woff2" => "font/woff2", + ".wpd" => "application/vnd.wordperfect", + ".wpl" => "application/vnd.ms-wpl", + ".wps" => "application/vnd.ms-works", + ".wqd" => "application/vnd.wqd", + ".wri" => "application/x-mswrite", + ".wrl" => "model/vrml", + ".wsdl" => "application/wsdl+xml", + ".wspolicy" => "application/wspolicy+xml", + ".wtb" => "application/vnd.webturbo", + ".wvx" => "video/x-ms-wvx", + ".x3d" => "application/vnd.hzn-3d-crossword", + ".xar" => "application/vnd.xara", + ".xbd" => "application/vnd.fujixerox.docuworks.binder", + ".xbm" => "image/x-xbitmap", + ".xdm" => "application/vnd.syncml.dm+xml", + ".xdp" => "application/vnd.adobe.xdp+xml", + ".xdw" => "application/vnd.fujixerox.docuworks", + ".xenc" => "application/xenc+xml", + ".xer" => "application/patch-ops-error+xml", + ".xfdf" => "application/vnd.adobe.xfdf", + ".xfdl" => "application/vnd.xfdl", + ".xhtml" => "application/xhtml+xml", + ".xif" => "image/vnd.xiff", + ".xla" => "application/vnd.ms-excel", + ".xlam" => "application/vnd.ms-excel.addin.macroEnabled.12", + ".xls" => "application/vnd.ms-excel", + ".xlsb" => "application/vnd.ms-excel.sheet.binary.macroEnabled.12", + ".xlsx" => "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + ".xlsm" => "application/vnd.ms-excel.sheet.macroEnabled.12", + ".xlt" => "application/vnd.ms-excel", + ".xltx" => "application/vnd.openxmlformats-officedocument.spreadsheetml.template", + ".xml" => "application/xml", + ".xo" => "application/vnd.olpc-sugar", + ".xop" => "application/xop+xml", + ".xpm" => "image/x-xpixmap", + ".xpr" => "application/vnd.is-xpr", + ".xps" => "application/vnd.ms-xpsdocument", + ".xpw" => "application/vnd.intercon.formnet", + ".xsl" => "application/xml", + ".xslt" => "application/xslt+xml", + ".xsm" => "application/vnd.syncml+xml", + ".xspf" => "application/xspf+xml", + ".xul" => "application/vnd.mozilla.xul+xml", + ".xwd" => "image/x-xwindowdump", + ".xyz" => "chemical/x-xyz", + ".yaml" => "text/yaml", + ".yml" => "text/yaml", + ".zaz" => "application/vnd.zzazz.deck+xml", + ".zip" => "application/zip", + ".zmm" => "application/vnd.handheld-entertainment+xml", }; my $fallback = sub { }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Plack-1.0051/lib/Plack/Middleware/Auth/Basic.pm new/Plack-1.0054/lib/Plack/Middleware/Auth/Basic.pm --- old/Plack-1.0051/lib/Plack/Middleware/Auth/Basic.pm 2024-01-06 00:09:39.000000000 +0100 +++ new/Plack-1.0054/lib/Plack/Middleware/Auth/Basic.pm 2026-05-05 08:38:14.000000000 +0200 @@ -85,12 +85,21 @@ supplied and returns whether the authentication succeeds. Required. Authenticator can also be an object that responds to C<authenticate> -method that takes username and password and returns boolean, so -backends for L<Authen::Simple> is perfect to use: +method that takes username and password and returns boolean, so any +backends for L<Authen::Simple> are perfect to use: use Authen::Simple::LDAP; enable "Auth::Basic", authenticator => Authen::Simple::LDAP->new(...); +For authentication based on C<htpasswd> files: + + use Authen::Simple::Passwd; + enable "Auth::Basic", + realm => "Password protected area", + authenticator => Authen::Simple::Passwd->new( + path => "/path/to/.htpasswd", + ); + =item realm Realm name to display in the basic authentication dialog. Defaults to I<restricted area>. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Plack-1.0051/lib/Plack/Middleware/Lint.pm new/Plack-1.0054/lib/Plack/Middleware/Lint.pm --- old/Plack-1.0051/lib/Plack/Middleware/Lint.pm 2024-01-06 00:09:39.000000000 +0100 +++ new/Plack-1.0054/lib/Plack/Middleware/Lint.pm 2026-05-05 08:38:14.000000000 +0200 @@ -43,7 +43,7 @@ die('Missing mandatory env param: PATH_INFO'); } if ($env->{PATH_INFO} ne '' && $env->{PATH_INFO} !~ m!^/!) { - die('PATH_INFO must begin with / ($env->{PATH_INFO})'); + die("PATH_INFO must begin with / ($env->{PATH_INFO})"); } unless (defined($env->{SERVER_NAME})) { die('Missing mandatory env param: SERVER_NAME'); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Plack-1.0051/lib/Plack/Middleware/XSendfile.pm new/Plack-1.0054/lib/Plack/Middleware/XSendfile.pm --- old/Plack-1.0051/lib/Plack/Middleware/XSendfile.pm 2024-01-06 00:09:39.000000000 +0100 +++ new/Plack-1.0054/lib/Plack/Middleware/XSendfile.pm 2026-05-05 08:38:14.000000000 +0200 @@ -3,10 +3,17 @@ use warnings; use parent qw(Plack::Middleware); +use Carp (); use Plack::Util; use Scalar::Util; use Plack::Util::Accessor qw( variation ); +sub new { + my $class = shift; + Carp::carp("Plack::Middleware::XSendfile is deprecated and will be removed in a future release"); + $class->SUPER::new(@_); +} + sub call { my $self = shift; my $env = shift; @@ -70,6 +77,49 @@ enable "Plack::Middleware::XSendfile"; +=head1 DEPRECATION NOTICE + +This middleware is deprecated and will be removed in a future release, due to +poor security design caused by the way configuration is passed via HTTP request +headers. See L</SECURITY>. + +The simplest replacement is to set the appropriate header directly in your +application when serving a file. For example, in a Mojolicious controller: + + sub download { + my $c = shift; + $c->res->headers->header('X-Accel-Redirect' => '/path/to/document.pdf'); + $c->render(data => '', status => 200); + } + +If you need to handle this at the middleware layer instead to make it more +transparent, you can replicate the behavior inline using L<Plack::Builder>: + + use Plack::Builder; + use Plack::Util; + use Scalar::Util qw(blessed); + + builder { + enable sub { + my $app = shift; + sub { + my $env = shift; + my $res = $app->($env); + Plack::Util::response_cb($res, sub { + my $res = shift; + my $body = $res->[2]; + if (blessed($body) && $body->can('path')) { + my $h = Plack::Util::headers($res->[1]); + $h->set('X-Sendfile' => $body->path); + $h->set('Content-Length', 0); + $res->[2] = []; + } + }); + }; + }; + $app; + }; + =head1 DESCRIPTION When the body is a blessed reference with a C<path> method, then the @@ -84,11 +134,62 @@ You should use L<IO::File::WithPath> or L<Plack::Util>'s C<set_io_path> to add C<path> method to an IO object in the body. -See L<http://github.com/rack/rack-contrib/blob/master/lib/rack/contrib/sendfile.rb> -for the frontend configuration. +See L<https://www.nginx.com/resources/wiki/start/topics/examples/xsendfile> +for frontend configuration examples. Plack::Middleware::XSendfile does not set the Content-Type header. +=head1 FRONTEND CONFIGURATION + +=head2 Nginx + +Nginx supports C<X-Accel-Redirect>. Configure an internal location and +pass the C<X-Accel-Mapping> header to the backend so the middleware can +rewrite filesystem paths into internal URLs: + + location ~ /files/(.*) { + internal; + alias /var/www/$1; + } + + location / { + proxy_pass http://127.0.0.1:5000/; + proxy_set_header X-Sendfile-Type X-Accel-Redirect; + proxy_set_header X-Accel-Mapping /var/www/=/files/; + } + +C<X-Accel-Mapping> tells the middleware which filesystem prefix to replace +and what internal URL prefix to use instead. + +=head2 Apache + +Enable mod_xsendfile (L<https://tn123.org/mod_xsendfile/>) and set the +request header so the middleware activates: + + RequestHeader Set X-Sendfile-Type X-Sendfile + XSendFile on + +=head2 lighttpd + + proxy-core.allow-x-sendfile = "enable" + proxy-core.rewrite-request = ( + "X-Sendfile-Type" => (".*" => "X-Sendfile") + ) + +=head1 SECURITY + +This middleware reads C<X-Sendfile-Type> and C<X-Accel-Mapping> from incoming +request headers to determine how to serve files. It is therefore critical that +these headers are set by the frontend proxy and cannot be supplied by untrusted +clients; otherwise a client could influence which files the frontend serves. + +B<The Plack backend must not be directly reachable by untrusted clients.> + +For each frontend, make sure B<both> headers are explicitly set in the proxy +configuration. C<proxy_set_header> (nginx), C<RequestHeader Set> (Apache), and +C<proxy-core.rewrite-request> (lighttpd) all overwrite any client-supplied +values, which is why the examples above use those directives. + =head1 CONFIGURATION =over 4 @@ -111,7 +212,7 @@ =back -An unsupport value will log an error. +An unsupported value will log an error. =back diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Plack-1.0051/lib/Plack/Request.pm new/Plack-1.0054/lib/Plack/Request.pm --- old/Plack-1.0051/lib/Plack/Request.pm 2024-01-06 00:09:39.000000000 +0100 +++ new/Plack-1.0054/lib/Plack/Request.pm 2026-05-05 08:38:14.000000000 +0200 @@ -2,7 +2,7 @@ use strict; use warnings; use 5.008_001; -our $VERSION = '1.0051'; +our $VERSION = '1.0054'; use HTTP::Headers::Fast; use Carp (); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Plack-1.0051/lib/Plack/Response.pm new/Plack-1.0054/lib/Plack/Response.pm --- old/Plack-1.0051/lib/Plack/Response.pm 2024-01-06 00:09:39.000000000 +0100 +++ new/Plack-1.0054/lib/Plack/Response.pm 2026-05-05 08:38:14.000000000 +0200 @@ -1,7 +1,7 @@ package Plack::Response; use strict; use warnings; -our $VERSION = '1.0051'; +our $VERSION = '1.0054'; use Plack::Util::Accessor qw(body status); use Carp (); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Plack-1.0051/lib/Plack.pm new/Plack-1.0054/lib/Plack.pm --- old/Plack-1.0051/lib/Plack.pm 2024-01-06 00:09:39.000000000 +0100 +++ new/Plack-1.0054/lib/Plack.pm 2026-05-05 08:38:14.000000000 +0200 @@ -3,7 +3,7 @@ use strict; use warnings; use 5.008_001; -our $VERSION = '1.0051'; +our $VERSION = '1.0054'; 1; __END__ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Plack-1.0051/t/HTTP-Server-PSGI/listen.t new/Plack-1.0054/t/HTTP-Server-PSGI/listen.t --- old/Plack-1.0051/t/HTTP-Server-PSGI/listen.t 2024-01-06 00:09:39.000000000 +0100 +++ new/Plack-1.0054/t/HTTP-Server-PSGI/listen.t 2026-05-05 08:38:14.000000000 +0200 @@ -29,6 +29,7 @@ client => sub { my $port = shift; my $ua = LWP::UserAgent->new; + $ua->timeout($ua_timeout); my $res = $ua->get("http://127.0.0.1:$port/"); ok $res->is_success; is $res->code, 200; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Plack-1.0051/t/Plack-MIME/fallback.t new/Plack-1.0054/t/Plack-MIME/fallback.t --- old/Plack-1.0051/t/Plack-MIME/fallback.t 2024-01-06 00:09:39.000000000 +0100 +++ new/Plack-1.0054/t/Plack-MIME/fallback.t 2026-05-05 08:38:14.000000000 +0200 @@ -1,11 +1,12 @@ use Test::More; +BEGIN { plan skip_all => "MIME::Types requires Perl 5.16+" if $] < 5.016 } use Test::Requires qw(MIME::Types); use Plack::MIME; use MIME::Types 'by_suffix'; -is( Plack::MIME->mime_type(".vcd"), undef ); +is( Plack::MIME->mime_type(".ncm"), undef ); Plack::MIME->set_fallback(sub { (by_suffix $_[0])[0] }); -is( Plack::MIME->mime_type(".vcd"), "application/x-cdlink" ); +is( Plack::MIME->mime_type(".ncm"), "application/vnd.nokia.configuration-message" ); done_testing; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Plack-1.0051/t/Plack-Middleware/httpexceptions.t new/Plack-1.0054/t/Plack-Middleware/httpexceptions.t --- old/Plack-1.0051/t/Plack-Middleware/httpexceptions.t 2024-01-06 00:09:39.000000000 +0100 +++ new/Plack-1.0054/t/Plack-Middleware/httpexceptions.t 2026-05-05 08:38:14.000000000 +0200 @@ -11,16 +11,16 @@ } package HTTP::Error::InternalServerError; -use base qw(HTTP::Error); +use parent -norequire => qw(HTTP::Error); sub code { 500 } package HTTP::Error::Forbidden; -use base qw(HTTP::Error); +use parent -norequire => qw(HTTP::Error); sub code { 403 } sub as_string { "blah blah blah" } package HTTP::Error::Redirect; -use base qw(HTTP::Error); +use parent -norequire => qw(HTTP::Error); sub code { 302 } sub location { "http://somewhere/else" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Plack-1.0051/t/Plack-Middleware/httpexceptions_streaming.t new/Plack-1.0054/t/Plack-Middleware/httpexceptions_streaming.t --- old/Plack-1.0051/t/Plack-Middleware/httpexceptions_streaming.t 2024-01-06 00:09:39.000000000 +0100 +++ new/Plack-1.0054/t/Plack-Middleware/httpexceptions_streaming.t 2026-05-05 08:38:14.000000000 +0200 @@ -11,11 +11,11 @@ } package HTTP::Error::InternalServerError; -use base qw(HTTP::Error); +use parent -norequire => qw(HTTP::Error); sub code { 500 } package HTTP::Error::Forbidden; -use base qw(HTTP::Error); +use parent -norequire => qw(HTTP::Error); sub code { 403 } sub as_string { "blah blah blah" } ++++++ README.md ++++++ ## Build Results Current state of perl in openSUSE:Factory is  The current state of perl in the devel project build (devel:languages:perl)  ++++++ _scmsync.obsinfo ++++++ mtime: 1777966395 commit: e965fa2ebab8c289f65dc58f15da74270e07bea67464a5b3169c4e91bdf0dc96 url: https://src.opensuse.org/perl/perl-Plack revision: e965fa2ebab8c289f65dc58f15da74270e07bea67464a5b3169c4e91bdf0dc96 projectscmsync: https://src.opensuse.org/perl/_ObsPrj ++++++ build.specials.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.gitignore new/.gitignore --- old/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/.gitignore 2026-05-05 09:33:15.000000000 +0200 @@ -0,0 +1 @@ +.osc
