Subject: Re: [PATCH] gitweb: Support comparing blobs (files) with different names

From: Jakub Narebski <[email-masked]>
Date: Sat, 31 Mar 2007 01:55:14 +0200

On Wed, Mar 28, 2007, Martin Koegler wrote:

> I created a blob with a "strange" filename: &()=!"§$%[<>]*#+_;.
> In the result of the blob view, the " is not escaped in the filename in the header
> and a strage content type is returned:
> 
> $ telnet localhost 80
> Trying 127.0.0.1...
> Connected to localhost.
> Escape character is '^]'.
> GET /gitweb/gitweb.cgi?p=t/.git;a=blob;f=%26()%3D%21%22%A7%24%25%5B%3C%3E%5D%2A%23%2B_%3B.;hb=7bfed2588bee66b33db544830606fa6606478fd9 HTTP/1.0
> 
> HTTP/1.1 200 OK
> Date: Wed, 28 Mar 2007 19:55:36 GMT
> Server: Apache
> Content-disposition: inline; filename="&()=!"Â§$%[<>]*#+_;."
> Expires: Thu, 29 Mar 2007 19:55:39 GMT
> Connection: close
> Content-Type: application/vnd.mif
> 
> xx

There are two separate things. 

First is not escaped filename in HTTP header. There was some discussion
about this, and even patch by Luben Tuikov which added to_qtext 
subroutine to deal with escaping in HTTP (which has diferent rules than
escaping in HTML, or in HTML attributes)
 * gitweb: using quotemeta
   http://thread.gmane.org/gmane.comp.version-control.git/28050/
 * [PATCH] gitweb: Convert Content-Disposition filenames into qtext
   http://thread.gmane.org/gmane.comp.version-control.git/28437
But the patch was newer accepted; either lost in the noise, or in lack
of summary to the discussion.

Second is detecting file as binary (for text files we always return
HTML), and content type set. Gitweb checks mimetype of a file (based
on extension, mainly) by default using /etc/mime.magic, and if it is
neither text/* nor HTML images (png, jpg, gif) it uses "blobdiff_plain"
view. Perhaps instead of just calling git_blob_plain($mimetype) we
should do a redirect (but then how to pass detected mimetype?). It looks
like there is an error with mimetype detection: could you tell me the
line with "application/vnd.mif" in your /etc/mime.types?

-- 
Jakub Narebski
Poland