[RFC/PATCHv2 3/3] gitweb: Silence stderr in parse_commit*() subroutines
From: Jakub Narebski <hidden>
Date: 2016-06-15 22:53:05
Subsystem:
the rest · Maintainer:
Linus Torvalds
git-rev-list command in parse_commit() and parse_commits() can fail because $commit_id doesn't point to a valid commit; for example if we are on unborn branch HEAD doesn't point to a valid commit. In this case git-rev-list prints fatal: bad revision 'HEAD' on its standard error. This commit silences this warning, at the cost of using shell to redirect it to /dev/null, and relying on quote_command() to protect against code injection. Note however that such error message from git (from external command) usually (but not always) does not appear in web server logs. Reported-by: rajesh boyapati <redacted> Signed-off-by: Jakub Narebski <redacted> --- This patch first appeared on git mailing list in "Fwd: Git-web error" thread as [PATCH] gitweb: Silence stderr in parse_commit*() subroutines Message-Id: [ref] http://article.gmane.org/gmane.comp.version-control.git/190511 More proof of concept rather than real fix for real issue; it doesn't even fix the issue (for some reason) for original poster. gitweb/gitweb.perl | 10 ++++++---- 1 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 2eaf585..224ace4 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl@@ -3338,12 +3338,13 @@ sub parse_commit { local $/ = "\0"; - open my $fd, "-|", git_cmd(), "rev-list", + open my $fd, "-|", quote_command( + git_cmd(), "rev-list", "--parents", "--header", "--max-count=1", $commit_id, - "--", + "--") . ' 2>/dev/null', or die_error(500, "Open git-rev-list failed"); my $commit_text = <$fd>; %co = parse_commit_text($commit_text, 1)
@@ -3363,7 +3364,8 @@ sub parse_commits { local $/ = "\0"; - open my $fd, "-|", git_cmd(), "rev-list", + open my $fd, "-|", quote_command( + git_cmd(), "rev-list", "--header", @args, ("--max-count=" . $maxcount),
@@ -3371,7 +3373,7 @@ sub parse_commits { @extra_options, $commit_id, "--", - ($filename ? ($filename) : ()) + ($filename ? ($filename) : ())) . ' 2>/dev/null' or die_error(500, "Open git-rev-list failed"); while (my $line = <$fd>) { my %co = parse_commit_text($line);
--
1.7.9