]> Lady’s Gitweb - Gitweb/blobdiff - gitweb.perl
gitweb: fix esc_url
[Gitweb] / gitweb.perl
index 0ca1f7cd8a52505d9776bc52cea5918c9c23a73a4c48909726b36c6093f5a9cc..2c383545916dc0fc7de27eb91301f6c56dad290c4b6c1c0e109243d583ae521f 100755 (executable)
@@ -1028,18 +1028,18 @@ sub dispatch {
        $actions{$action}->();
 }
 
-sub run_request {
+sub reset_timer {
        our $t0 = [Time::HiRes::gettimeofday()]
                if defined $t0;
+       our $number_of_git_cmds = 0;
+}
+
+sub run_request {
+       reset_timer();
 
        evaluate_uri();
-       evaluate_gitweb_config();
-       evaluate_git_version();
        check_loadavg();
 
-       # $projectroot and $projects_list might be set in gitweb config file
-       $projects_list ||= $projectroot;
-
        evaluate_query_params();
        evaluate_path_info();
        evaluate_and_validate_params();
@@ -1087,6 +1087,11 @@ sub evaluate_argv {
 
 sub run {
        evaluate_argv();
+       evaluate_gitweb_config();
+       evaluate_git_version();
+
+       # $projectroot and $projects_list might be set in gitweb config file
+       $projects_list ||= $projectroot;
 
        $pre_listen_hook->()
                if $pre_listen_hook;
@@ -1110,6 +1115,15 @@ sub run {
 
 run();
 
+if (defined caller) {
+       # wrapped in a subroutine processing requests,
+       # e.g. mod_perl with ModPerl::Registry, or PSGI with Plack::App::WrapCGI
+       return;
+} else {
+       # pure CGI script, serving single request
+       exit;
+}
+
 ## ======================================================================
 ## action links
 
@@ -1314,8 +1328,7 @@ sub esc_param {
 sub esc_url {
        my $str = shift;
        return undef unless defined $str;
-       $str =~ s/([^A-Za-z0-9\-_.~();\/;?:@&=])/sprintf("%%%02X", ord($1))/eg;
-       $str =~ s/\+/%2B/g;
+       $str =~ s/([^A-Za-z0-9\-_.~();\/;?:@&= ]+)/CGI::escape($1)/eg;
        $str =~ s/ /\+/g;
        return $str;
 }
This page took 0.172419 seconds and 4 git commands to generate.