diff --git a/lib/Plack/Middleware/Lint.pm b/lib/Plack/Middleware/Lint.pm index 76e9a3a1..b69827ca 100644 --- a/lib/Plack/Middleware/Lint.pm +++ b/lib/Plack/Middleware/Lint.pm @@ -30,7 +30,7 @@ sub validate_env { unless ($env->{REQUEST_METHOD}) { die('Missing env param: REQUEST_METHOD'); } - unless ($env->{REQUEST_METHOD} =~ /^[A-Z]+$/) { + unless ($env->{REQUEST_METHOD} =~ /^[A-Za-z0-9!#\$%&'*+\-.^_`|~]+$/) { die("Invalid env param: REQUEST_METHOD($env->{REQUEST_METHOD})"); } unless (defined($env->{SCRIPT_NAME})) { # allows empty string diff --git a/t/Plack-Middleware/lint_env.t b/t/Plack-Middleware/lint_env.t index 5806378f..b83cf2d7 100644 --- a/t/Plack-Middleware/lint_env.t +++ b/t/Plack-Middleware/lint_env.t @@ -13,11 +13,15 @@ $app = Plack::Middleware::Lint->wrap($app); my @good_env = ( { PATH_INFO => '' }, + { REQUEST_METHOD => 'get' }, + { REQUEST_METHOD => 'GeT' }, + { REQUEST_METHOD => 'my-custom-method' }, ); my @bad_env = ( [ { REQUEST_METHOD => undef }, qr/Missing env param: REQUEST_METHOD/ ], - [ { REQUEST_METHOD => "foo" },, qr/Invalid env param: REQUEST_METHOD/ ], + [ { REQUEST_METHOD => "foo bar" }, qr/Invalid env param: REQUEST_METHOD/ ], + [ { REQUEST_METHOD => "" }, qr/Missing env param: REQUEST_METHOD/ ], [ { PATH_INFO => 'foo' }, qr/PATH_INFO must begin with \// ], [ { SERVER_PORT => undef }, qr/Missing mandatory .*SERVER_PORT/ ], [ { SERVER_PROTOCOL => 'HTTP/x' }, qr/Invalid SERVER_PROTOCOL/ ],