diff options
author | Junio C Hamano <gitster@pobox.com> | 2012-01-16 16:45:56 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2012-01-16 16:45:56 -0800 |
commit | b63103e908af54e5e2eaa3faad350e4738ef0047 (patch) | |
tree | 3e956e2518512ded3fd9987aad7ac10d3f1850b4 /gitweb/gitweb.perl | |
parent | 6db5c6e43dccb380ca6e9947777985eb11248c31 (diff) | |
parent | 8e09fd1a1e5ea8eaec960d47be51bde85df8870e (diff) | |
download | git-b63103e908af54e5e2eaa3faad350e4738ef0047.tar.gz |
Merge branch 'jn/maint-gitweb-grep-fix'
* jn/maint-gitweb-grep-fix:
gitweb: Harden "grep" search against filenames with ':'
gitweb: Fix file links in "grep" search
Diffstat (limited to 'gitweb/gitweb.perl')
-rwxr-xr-x | gitweb/gitweb.perl | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl index 285fe88403..abb5a79afc 100755 --- a/gitweb/gitweb.perl +++ b/gitweb/gitweb.perl @@ -5836,7 +5836,7 @@ sub git_search_files { my %co = @_; local $/ = "\n"; - open my $fd, "-|", git_cmd(), 'grep', '-n', + open my $fd, "-|", git_cmd(), 'grep', '-n', '-z', $search_use_regexp ? ('-E', '-i') : '-F', $searchtext, $co{'tree'} or die_error(500, "Open git-grep failed"); @@ -5852,13 +5852,14 @@ sub git_search_files { my $lastfile = ''; while (my $line = <$fd>) { chomp $line; - my ($file, $lno, $ltext, $binary); + my ($file, $file_href, $lno, $ltext, $binary); last if ($matches++ > 1000); if ($line =~ /^Binary file (.+) matches$/) { $file = $1; $binary = 1; } else { - (undef, $file, $lno, $ltext) = split(/:/, $line, 4); + ($file, $lno, $ltext) = split(/\0/, $line, 3); + $file =~ s/^$co{'tree'}://; } if ($file ne $lastfile) { $lastfile and print "</td></tr>\n"; @@ -5867,10 +5868,10 @@ sub git_search_files { } else { print "<tr class=\"light\">\n"; } + $file_href = href(action=>"blob", hash_base=>$co{'id'}, + file_name=>$file); print "<td class=\"list\">". - $cgi->a({-href => href(action=>"blob", hash=>$co{'hash'}, - file_name=>"$file"), - -class => "list"}, esc_path($file)); + $cgi->a({-href => $file_href, -class => "list"}, esc_path($file)); print "</td><td>\n"; $lastfile = $file; } @@ -5888,10 +5889,9 @@ sub git_search_files { $ltext = esc_html($ltext, -nbsp=>1); } print "<div class=\"pre\">" . - $cgi->a({-href => href(action=>"blob", hash=>$co{'hash'}, - file_name=>"$file").'#l'.$lno, - -class => "linenr"}, sprintf('%4i', $lno)) - . ' ' . $ltext . "</div>\n"; + $cgi->a({-href => $file_href.'#l'.$lno, + -class => "linenr"}, sprintf('%4i', $lno)) . + ' ' . $ltext . "</div>\n"; } } if ($lastfile) { |