From: Jakub Narebski Date: Fri, 30 Mar 2007 23:55:14 GMT Subject: Re: [PATCH] gitweb: Support comparing blobs (files) with different names Message-ID: <200703310155.14452.jnareb@gmail.com> In-Reply-To: <20070328210301.GA57@auto.tuwien.ac.at> 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