@@ -2,6 +2,7 @@ use Mojo::Base -strict;
2
2
3
3
use Test::More;
4
4
use Mojo::Message::Request;
5
+ use Mojo::Util ' encode' , ' url_escape' ;
5
6
6
7
subtest ' Parse Lighttpd CGI environment variables and body' => sub {
7
8
my $req = Mojo::Message::Request-> new;
@@ -124,6 +125,29 @@ subtest 'Parse CGI environment with maximum message size' => sub {
124
125
' right absolute URL' ;
125
126
};
126
127
128
+ subtest ' Parse CGI environment with SCRIPT_NAME set and path part with UTF8 character' => sub {
129
+ my $req = Mojo::Message::Request-> new;
130
+ my $script_name = ' /app/' ;
131
+ my $path_stub = ' some/action/blub/' ;
132
+ my $part_utf8 = encode(q( utf-8) , " \x{1d120} " );
133
+ my $path = $path_stub .url_escape($part_utf8 );
134
+ # test $env is a stripped down version of the result of:
135
+ # use HTTP::Request::Common 'GET';
136
+ # use HTTP::Message::PSGI 'req_to_psgi';
137
+ # $env = req_to_psgi( GET( 'http://www.example.com'.$script_name.$path ), SCRIPT_NAME => $script_name );
138
+ $req -> parse({
139
+ CONTENT_LENGTH => 0,
140
+ PATH_INFO => ' /' .$path_stub .$part_utf8 ,
141
+ REQUEST_URI => $script_name .$path ,
142
+ QUERY_STRING => ' ' ,
143
+ REQUEST_METHOD => ' GET' ,
144
+ SCRIPT_NAME => $script_name ,
145
+ HTTP_HOST => ' localhost:8080' ,
146
+ SERVER_PROTOCOL => ' HTTP/1.1'
147
+ });
148
+ is $req -> url-> path-> to_string, $path , ' round tripping yields same path' ;
149
+ };
150
+
127
151
subtest ' Parse Apache CGI environment variables and body (file storage)' => sub {
128
152
local $ENV {MOJO_MAX_MEMORY_SIZE } = 10;
129
153
my $req = Mojo::Message::Request-> new;
0 commit comments