cacfc09ba8
When gitweb is used as a DirectoryIndex, it attempts to strip PATH_INFO on its own, as $cgi->url() fails to do so. However, it fails to account for the fact that PATH_INFO has already been URL-decoded by the web server, but the value returned by $cgi->url() has not been. This causes the stripping to fail whenever the URL contains encoded characters. To see this in action, setup gitweb as a DirectoryIndex and then use it on a repository with a directory containing a space in the name. Navigate to tree view, examine the gitweb generated html and you'll see a link such as: <a href="/test.git/tree/HEAD:/directory with spaces">directory with spaces</a> When clicked on, the browser will URL-encode this link, giving a $cgi->url() of the form: /test.git/tree/HEAD:/directory%20with%20spaces While PATH_INFO is: /test.git/tree/HEAD:/directory with spaces Fix this by calling unescape() on both $my_url and $my_uri before stripping PATH_INFO from them. Signed-off-by: Jay Soffian <jaysoffian@gmail.com> Acked-by: Jakub Narebski <jnareb@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> |
||
---|---|---|
.. | ||
static | ||
gitweb.perl | ||
INSTALL | ||
Makefile | ||
README |
GIT web Interface ================= The one working on: http://git.kernel.org/ From the git version 1.4.0 gitweb is bundled with git. Build time gitweb configuration ------------------------------- There are many configuration variables which affect building gitweb (among others creating gitweb.cgi out of gitweb.perl by replacing placeholders such as `++GIT_BINDIR++` by their build-time values). Building and installing gitweb is described in gitweb's INSTALL file (in 'gitweb/INSTALL'). Runtime gitweb configuration ---------------------------- Gitweb obtains configuration data from the following sources in the following order: 1. built-in values (some set during build stage), 2. common system-wide configuration file (`GITWEB_CONFIG_COMMON`, defaults to '/etc/gitweb-common.conf'), 3. either per-instance configuration file (`GITWEB_CONFIG`, defaults to 'gitweb_config.perl' in the same directory as the installed gitweb), or if it does not exists then system-wide configuration file (`GITWEB_CONFIG_SYSTEM`, defaults to '/etc/gitweb.conf'). Values obtained in later configuration files override values obtained earlier in above sequence. You can read defaults in system-wide GITWEB_CONFIG_SYSTEM from GITWEB_CONFIG by adding read_config_file($GITWEB_CONFIG_SYSTEM); at very beginning of per-instance GITWEB_CONFIG file. In this case settings in said per-instance file will override settings from system-wide configuration file. Note that read_config_file checks itself that the $GITWEB_CONFIG_SYSTEM file exists. The most notable thing that is not configurable at compile time are the optional features, stored in the '%features' variable. Ultimate description on how to reconfigure the default features setting in your `GITWEB_CONFIG` or per-project in `project.git/config` can be found as comments inside 'gitweb.cgi'. See also gitweb.conf(5) manpage. Web server configuration ------------------------ Gitweb can be run as CGI script, as legacy mod_perl application (using ModPerl::Registry), and as FastCGI script. You can find some simple examples in "Example web server configuration" section in INSTALL file for gitweb (in gitweb/INSTALL). See "Webserver configuration" and "Advanced web server setup" sections in gitweb(1) manpage. AUTHORS ------- Originally written by: Kay Sievers <kay.sievers@vrfy.org> Any comment/question/concern to: Git mailing list <git@vger.kernel.org>