From: Jakub Narebski <jnareb@gmail.com>
To: Junio C Hamano <junkio@cox.net>
Cc: git@vger.kernel.org
Subject: Re: [PATCH/RFC 1/n] gitweb: Better git-unquoting and gitweb-quoting of pathnames
Date: Fri, 3 Nov 2006 11:59:01 +0100 [thread overview]
Message-ID: <200611031159.02065.jnareb@gmail.com> (raw)
In-Reply-To: <7vlkmtgd3o.fsf@assigned-by-dhcp.cox.net>
Junio C Hamano wrote:
> Jakub Narebski <jnareb@gmail.com> writes:
>
> > diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
> > index ec46b80..a15e916 100755
> > --- a/gitweb/gitweb.perl
> > +++ b/gitweb/gitweb.perl
> > @@ -563,12 +563,42 @@ sub esc_html {
> > return $str;
> > }
> >
> > +# quote unsafe characters and escape filename to HTML
> > +sub esc_path {
> > + my $str = shift;
> > + $str = esc_html($str);
> > + $str =~ s/[[:cntrl:]\a\b\e\f\n\r\t\011]/?/g; # like --hide-control-chars in ls
> > + return $str;
> > +}
> > +
>
> When you say "[:cntrl:]" do you need to say anything more?
Ooops. Yes, the \a\b\e\f\n\r\t\011 part is redundant.
> > # git may return quoted and escaped filenames
> > sub unquote {
> > my $str = shift;
> > +
> > + sub unq {
> > + my $seq = shift;
> > + my %es = (
> > + 't' => "\t", # tab (HT, TAB)
> > + 'n' => "\n", # newline (NL)
> > + 'r' => "\r", # return (CR)
> > + 'f' => "\f", # form feed (FF)
> > + 'b' => "\b", # backspace (BS)
> > + 'a' => "\a", # alarm (bell) (BEL)
> > + #'e' => "\e", # escape (ESC)
> > + 'v' => "\011", # vertical tab (VT)
> > + );
> > +
> > + # octal char sequence
> > + return chr(oct($seq)) if ($seq =~ m/^[0-7]{1,3}$/);
> > + # C escape sequence (this includes '\n' (LF) and '\t' (TAB))
> > + return $es{$seq} if ($seq =~ m/^[abefnrtv]$/);
>
> Problems in this part of the code X-<.
>
> * Was there a reason not to unwrap '\e' to "\e"?
It was not mentioned in description of git pathname quoting in the
message
http://marc.theaimsgroup.com/?l=git&m=112927316408690&w=2;
> * The vertical tab is \013 (decimal 11), not \011 (which is TAB).
Oops. ASCII 11 is decimal 11.
> * The name and the abbreviated name of the character "\n" are
> "line feed" and "LF"; I personally do not think these
> character name comments are needed in this part of the code,
> but I do not object if you want to have them there, as long
> as you spell them correctly. cf. ISO/IEC 6429:1992 or
> http://www.unicode.org/charts/PDF/U0000.pdf for example.
Perhaps it should be "LF ('\n') and TAB ('\t')".
> * The hash %es and the pattern /[abef...]/ must be kept in
> sync; it is a maintenance nightmare,
>
> * Worse yet, they do not agree even in this initial version,
> which proves the previous point.
>
> Perhaps this is better written as:
>
> if (exists $es{$seq}) {
> return $es{$seq};
> }
Fact.
Or
return $es{$seq} if exists $es{$seq};
--
Jakub Narebski
next prev parent reply other threads:[~2006-11-03 10:58 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-10-30 18:53 [PATCH 0/n] gitweb: Better quoting and New improved patchset view Jakub Narebski
2006-10-30 18:58 ` [PATCH/RFC 1/n] gitweb: Better git-unquoting and gitweb-quoting of pathnames Jakub Narebski
2006-11-03 8:15 ` Junio C Hamano
2006-11-03 10:59 ` Jakub Narebski [this message]
2006-11-03 11:58 ` Junio C Hamano
2006-11-03 12:09 ` Jakub Narebski
2006-10-30 18:59 ` [PATCH 2/n] gitweb: Use '&iquot;' instead of '?' in esc_path Jakub Narebski
2006-10-31 0:34 ` Junio C Hamano
2006-10-31 1:27 ` Junio C Hamano
2006-10-31 9:23 ` Jakub Narebski
2006-11-03 16:19 ` Jakub Narebski
2006-11-03 21:44 ` Junio C Hamano
2006-11-03 22:33 ` Jakub Narebski
2006-11-03 22:44 ` Junio C Hamano
2006-11-03 22:50 ` Petr Baudis
2006-11-03 23:35 ` Jakub Narebski
2006-11-04 0:02 ` Junio C Hamano
2006-11-04 10:31 ` Petr Baudis
2006-11-06 21:58 ` Jakub Narebski
2006-11-06 22:47 ` Junio C Hamano
2006-11-06 23:16 ` Jakub Narebski
[not found] ` <7vwt68b0f3.fsf@assigned-by-dhcp.cox.net>
2006-11-07 0:02 ` Jakub Narebski
2006-11-07 21:53 ` Jakub Narebski
2006-11-07 22:18 ` Junio C Hamano
2006-10-30 21:25 ` [PATCH 3/n] gitweb: Use 's' regexp modifier to secure against filenames with LF Jakub Narebski
2006-10-30 21:29 ` [PATCH 4/n] gitweb: Secure against commit-ish/tree-ish with the same name as path Jakub Narebski
2006-10-31 16:53 ` Jakub Narebski
2006-11-01 0:24 ` Junio C Hamano
2006-11-01 0:40 ` Jakub Narebski
2006-11-02 1:01 ` Junio C Hamano
2006-11-02 8:49 ` Jakub Narebski
2006-11-03 6:18 ` Junio C Hamano
2006-11-03 9:35 ` Junio C Hamano
2006-11-03 10:49 ` Jakub Narebski
2006-10-31 14:22 ` [PATCH 5/n] [take 3] gitweb: New improved patchset view Jakub Narebski
2006-11-03 10:26 ` [PATCH 5/10] " Jakub Narebski
2006-10-31 16:07 ` [PATCH 6/n] gitweb: Remove redundant "blob" links from git_difftree_body Jakub Narebski
2006-11-03 6:41 ` Junio C Hamano
2006-11-03 11:01 ` Jakub Narebski
2006-10-31 16:36 ` [PATCH 7/n] gitweb: Output also empty patches in "commitdiff" view Jakub Narebski
2006-11-03 11:56 ` Jakub Narebski
2006-10-31 16:43 ` [PATCH 8/n] gitweb: Fix two issues with quoted filenames in git_patchset_body Jakub Narebski
2006-11-01 13:33 ` [PATCH 9/n] gitweb: Better support for non-CSS aware web browsers Jakub Narebski
2006-11-01 13:38 ` Petr Baudis
2006-11-01 13:36 ` [PATCH 10/n] gitweb: New improved formatting of chunk header in diff Jakub Narebski
2006-11-01 18:52 ` [PATCH 00/10] gitweb: Better quoting and New improved patchset view Jakub Narebski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200611031159.02065.jnareb@gmail.com \
--to=jnareb@gmail.com \
--cc=git@vger.kernel.org \
--cc=junkio@cox.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).