git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[RFC/PATCHv2 3/3] gitweb: Silence stderr in parse_commit*() subroutines

From
Jakub Narebski <jnareb@gmail.com>
Date
Feb 15, 2012, 15:36 UTC
Message-ID
<1329320203-20272-4-git-send-email-jnareb@gmail.com>
In-Reply-To
<1329320203-20272-1-git-send-email-jnareb@gmail.com>

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 <boyapatisrajesh@gmail.com>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
---
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: <201202111402.31684.jnareb@gmail.com>
  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
Previous: Jakub Narebski
Message 9 of 9 in “[PATCHv2 0/3] gitweb: Dealing with being on unborn branch”
  1. Jakub NarebskiFeb 15, 2012
  2. 1/3 gitweb: Deal with HEAD pointing to unborn branch in "heads" viewJakub Narebski, Feb 15, 2012
  3. Junio C HamanoFeb 16, 2012
  4. Jakub NarebskiFeb 16, 2012
  5. Junio C HamanoFeb 16, 2012
  6. Jakub NarebskiFeb 17, 2012
  7. Junio C HamanoFeb 17, 2012
  8. 2/3 gitweb: Harden parse_commit and parse_commitsJakub Narebski, Feb 15, 2012
  9. 3/3 gitweb: Silence stderr in parse_commit*() subroutinesJakub Narebski, Feb 15, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.