Fix URI bug masked by HTTP::Request::AsCGI
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Engine / CGI.pm
index cabd343..c57c8a5 100644 (file)
@@ -167,8 +167,7 @@ sub prepare_path {
             # incorrect.
             if (substr($req_uri, 0, 1) ne '/') {
                 my ($match) = $req_uri =~ m|^([^/]+)|;
-                my $idx = index($path_info, $match) + length($match);
-                my $path_info_part = substr($path_info, 0, $idx);
+                my ($path_info_part) = $path_info =~ m|^(.*?\Q$match\E)|;
                 substr($req_uri, 0, length($match), $path_info_part);
             }
             $path_info = $req_uri;
@@ -196,7 +195,7 @@ sub prepare_path {
     my $query = $ENV{QUERY_STRING} ? '?' . $ENV{QUERY_STRING} : '';
     my $uri   = $scheme . '://' . $host . '/' . $path . $query;
 
-    $c->request->uri( bless \$uri, $uri_class );
+    $c->request->uri( bless(\$uri, $uri_class)->canonical );
 
     # set the base URI
     # base must end in a slash
@@ -204,7 +203,7 @@ sub prepare_path {
 
     my $base_uri = $scheme . '://' . $host . $base_path;
 
-    $c->request->base( bless \$base_uri, $uri_class );
+    $c->request->base( bless(\$base_uri, $uri_class)->canonical );
 }
 
 =head2 $self->prepare_query_parameters($c)