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

[PATCH 5/5] gitweb: Quote filename in HTTP Content-Disposition: header

From
Jakub Narebski <jnareb@gmail.com>
Date
Sep 25, 2006, 23:59 UTC
Message-ID
<200609260159.43684.jnareb@gmail.com>
In-Reply-To
<200609260153.08503.jnareb@gmail.com>

Finish work started by a2f3db2f5de2a3667b0e038aa65e3e097e642e7d commit (although not documented in commit message) of quoting using quotemeta the filename in HTTP -content_disposition header. Uniquify output.

Just in case filename contains end of line character.
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
---
 gitweb/gitweb.perl |   17 +++++++++--------
 1 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index b51e061..4dd7a5d 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -2326,7 +2326,7 @@ sub git_project_index {
 	print $cgi->header(
 		-type => 'text/plain',
 		-charset => 'utf-8',
-		-content_disposition => qq(inline; filename="index.aux"));
+		-content_disposition => 'inline; filename="index.aux"');
 
 	foreach my $pr (@projects) {
 		if (!exists $pr->{'owner'}) {
@@ -2672,7 +2672,7 @@ sub git_blob_plain {
 	print $cgi->header(
 		-type => "$type",
 		-expires=>$expires,
-		-content_disposition => "inline; filename=\"$save_as\"");
+		-content_disposition => 'inline; filename="' . quotemeta($save_as) . '"');
 	undef $/;
 	binmode STDOUT, ':raw';
 	print <$fd>;
@@ -2846,10 +2846,11 @@ sub git_snapshot {
 
 	my $filename = basename($project) . "-$hash.tar.$suffix";
 
-	print $cgi->header(-type => 'application/x-tar',
-	                   -content_encoding => $ctype,
-	                   -content_disposition => "inline; filename=\"$filename\"",
-	                   -status => '200 OK');
+	print $cgi->header(
+		-type => 'application/x-tar',
+		-content_encoding => $ctype,
+		-content_disposition => 'inline; filename="' . quotemeta($filename) . '"',
+		-status => '200 OK');
 
 	my $git_command = git_cmd_str();
 	open my $fd, "-|", "$git_command tar-tree $hash \'$project\' | $command" or
@@ -3159,7 +3160,7 @@ sub git_blobdiff {
 			-type => 'text/plain',
 			-charset => 'utf-8',
 			-expires => $expires,
-			-content_disposition => qq(inline; filename=") . quotemeta($file_name) . qq(.patch"));
+			-content_disposition => 'inline; filename="' . quotemeta($file_name) . '.patch"');
 
 		print "X-Git-Url: " . $cgi->self_url() . "\n\n";
 
@@ -3262,7 +3263,7 @@ sub git_commitdiff {
 			-type => 'text/plain',
 			-charset => 'utf-8',
 			-expires => $expires,
-			-content_disposition => qq(inline; filename="$filename"));
+			-content_disposition => 'inline; filename="' . quotemeta($filename) . '"');
 		my %ad = parse_date($co{'author_epoch'}, $co{'author_tz'});
 		print <<TEXT;
 From: $co{'author'}
-- 
1.4.2.1
Previous: Jakub NarebskiNext: Junio C Hamano
Message 8 of 10 in “gitweb: A few code cleanup patches”
  1. 0/5 gitweb: A few code cleanup patchesJakub Narebski, Sep 25, 2006
  2. 1/5 gitweb: Strip trailing slashes from $path in git_get_hash_by_pathJakub Narebski, Sep 25, 2006
  3. 2/5 gitweb: Use "return" instead of "return undef" for some subsJakub Narebski, Sep 25, 2006
  4. 3/5 gitweb: Split validate_input into validate_pathname and validate_refnameJakub Narebski, Sep 25, 2006
  5. Junio C HamanoSep 26, 2006
  6. Jakub NarebskiSep 26, 2006
  7. 4/5 gitweb: Add git_url subroutine, and use it to quote full URLsJakub Narebski, Sep 25, 2006
  8. 5/5 gitweb: Quote filename in HTTP Content-Disposition: headerJakub Narebski, Sep 25, 2006
  9. Junio C HamanoSep 26, 2006
  10. Jakub NarebskiSep 26, 2006

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.