git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] gitweb: Change to use explicitly function call cgi->escapHTML()
@ 2007-03-06  3:58 Li Yang
  2007-03-06  6:55 ` Junio C Hamano
  0 siblings, 1 reply; 21+ messages in thread
From: Li Yang @ 2007-03-06  3:58 UTC (permalink / raw)
  To: junkio; +Cc: git, jnareb

Change to use explicitly function call cgi->escapHTML().
This fix the problem on some systems that escapeHTML() is not
functioning, as default CGI is not setting 'escape' parameter.

Signed-off-by: Li Yang <leoli@freescale.com>

---
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 653ca3c..3a564d1 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -591,7 +591,7 @@ sub esc_html ($;%) {
 	my %opts = @_;
 
 	$str = to_utf8($str);
-	$str = escapeHTML($str);
+	$str = $cgi->escapeHTML($str);
 	if ($opts{'-nbsp'}) {
 		$str =~ s/ /&nbsp;/g;
 	}
@@ -605,7 +605,7 @@ sub esc_path {
 	my %opts = @_;
 
 	$str = to_utf8($str);
-	$str = escapeHTML($str);
+	$str = $cgi->escapeHTML($str);
 	if ($opts{'-nbsp'}) {
 		$str =~ s/ /&nbsp;/g;
 	}

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* Re: [PATCH] gitweb: Change to use explicitly function call cgi->escapHTML()
  2007-03-06  3:58 [PATCH] gitweb: Change to use explicitly function call cgi->escapHTML() Li Yang
@ 2007-03-06  6:55 ` Junio C Hamano
  2007-03-06  9:34   ` Jakub Narebski
  0 siblings, 1 reply; 21+ messages in thread
From: Junio C Hamano @ 2007-03-06  6:55 UTC (permalink / raw)
  To: Li Yang; +Cc: git, jnareb

Li Yang <leoli@freescale.com> writes:

> Change to use explicitly function call cgi->escapHTML().
> This fix the problem on some systems that escapeHTML() is not
> functioning, as default CGI is not setting 'escape' parameter.
>
> Signed-off-by: Li Yang <leoli@freescale.com>

Regardless of the recent xhtml+html vs html discussion, I think
this is probably a sane change.  Comments?

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] gitweb: Change to use explicitly function call cgi->escapHTML()
  2007-03-06  6:55 ` Junio C Hamano
@ 2007-03-06  9:34   ` Jakub Narebski
  2007-03-06  9:39     ` Jeff King
  0 siblings, 1 reply; 21+ messages in thread
From: Jakub Narebski @ 2007-03-06  9:34 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Li Yang, git

On 3/6/07, Junio C Hamano <junkio@cox.net> wrote:
> Li Yang <leoli@freescale.com> writes:
>
> > Change to use explicitly function call cgi->escapHTML().
> > This fix the problem on some systems that escapeHTML() is not
> > functioning, as default CGI is not setting 'escape' parameter.
> >
> > Signed-off-by: Li Yang <leoli@freescale.com>
>
> Regardless of the recent xhtml+html vs html discussion, I think
> this is probably a sane change.  Comments?

Good (although a bit magic) solution. Ack, FWIW.

-- 
Jakub Narebski

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] gitweb: Change to use explicitly function call cgi->escapHTML()
  2007-03-06  9:34   ` Jakub Narebski
@ 2007-03-06  9:39     ` Jeff King
  2007-03-06  9:46       ` Junio C Hamano
  2007-03-06 10:31       ` Li Yang-r58472
  0 siblings, 2 replies; 21+ messages in thread
From: Jeff King @ 2007-03-06  9:39 UTC (permalink / raw)
  To: Jakub Narebski; +Cc: Junio C Hamano, Li Yang, git

On Tue, Mar 06, 2007 at 10:34:32AM +0100, Jakub Narebski wrote:

> >Regardless of the recent xhtml+html vs html discussion, I think
> >this is probably a sane change.  Comments?
> Good (although a bit magic) solution. Ack, FWIW.

I think this should do the same, and is perhaps less magic (or maybe
more, depending on your perspective).

-Peff

-- >8 --
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 653ca3c..5d1d8cf 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -17,6 +17,7 @@ use Fcntl ':mode';
 use File::Find qw();
 use File::Basename qw(basename);
 binmode STDOUT, ':utf8';
+CGI::autoEscape(1);
 
 BEGIN {
        CGI->compile() if $ENV{MOD_PERL};

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* Re: [PATCH] gitweb: Change to use explicitly function call cgi->escapHTML()
  2007-03-06  9:39     ` Jeff King
@ 2007-03-06  9:46       ` Junio C Hamano
  2007-03-06 10:31       ` Li Yang-r58472
  1 sibling, 0 replies; 21+ messages in thread
From: Junio C Hamano @ 2007-03-06  9:46 UTC (permalink / raw)
  To: Jeff King; +Cc: Jakub Narebski, Li Yang, git

Jeff King <peff@peff.net> writes:

> On Tue, Mar 06, 2007 at 10:34:32AM +0100, Jakub Narebski wrote:
>
>> >Regardless of the recent xhtml+html vs html discussion, I think
>> >this is probably a sane change.  Comments?
>> Good (although a bit magic) solution. Ack, FWIW.
>
> I think this should do the same, and is perhaps less magic (or maybe
> more, depending on your perspective).
>
> -Peff

Thanks.  I tend to agree, as it does not depend on the reader
knowing what magic $cgi default behaviour is by being
expliicit.

>
> -- >8 --
> diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
> index 653ca3c..5d1d8cf 100755
> --- a/gitweb/gitweb.perl
> +++ b/gitweb/gitweb.perl
> @@ -17,6 +17,7 @@ use Fcntl ':mode';
>  use File::Find qw();
>  use File::Basename qw(basename);
>  binmode STDOUT, ':utf8';
> +CGI::autoEscape(1);
>  
>  BEGIN {
>         CGI->compile() if $ENV{MOD_PERL};

^ permalink raw reply	[flat|nested] 21+ messages in thread

* RE: [PATCH] gitweb: Change to use explicitly function call cgi->escapHTML()
  2007-03-06  9:39     ` Jeff King
  2007-03-06  9:46       ` Junio C Hamano
@ 2007-03-06 10:31       ` Li Yang-r58472
  2007-03-06 10:41         ` Jeff King
  2007-03-06 10:45         ` Junio C Hamano
  1 sibling, 2 replies; 21+ messages in thread
From: Li Yang-r58472 @ 2007-03-06 10:31 UTC (permalink / raw)
  To: Jeff King, Jakub Narebski; +Cc: Junio C Hamano, git

> -----Original Message-----
> From: Jeff King [mailto:peff@peff.net]
> Sent: Tuesday, March 06, 2007 5:39 PM
> To: Jakub Narebski
> Cc: Junio C Hamano; Li Yang-r58472; git@vger.kernel.org
> Subject: Re: [PATCH] gitweb: Change to use explicitly function call
> cgi->escapHTML()
> 
> On Tue, Mar 06, 2007 at 10:34:32AM +0100, Jakub Narebski wrote:
> 
> > >Regardless of the recent xhtml+html vs html discussion, I think
> > >this is probably a sane change.  Comments?
> > Good (although a bit magic) solution. Ack, FWIW.
> 
> I think this should do the same, and is perhaps less magic (or maybe
> more, depending on your perspective).

Yes, it also fixed the problem.  I'm not very familiar with perl.  Will
CGI::autoEscape(1) change CGI action for other users of CGI module on
the system?  If so, maybe it will break other CGIs.

- Leo

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] gitweb: Change to use explicitly function call cgi->escapHTML()
  2007-03-06 10:31       ` Li Yang-r58472
@ 2007-03-06 10:41         ` Jeff King
  2007-03-06 10:53           ` Junio C Hamano
  2007-03-06 10:45         ` Junio C Hamano
  1 sibling, 1 reply; 21+ messages in thread
From: Jeff King @ 2007-03-06 10:41 UTC (permalink / raw)
  To: Li Yang-r58472; +Cc: Jakub Narebski, Junio C Hamano, git

On Tue, Mar 06, 2007 at 06:31:23PM +0800, Li Yang-r58472 wrote:

> Yes, it also fixed the problem.  I'm not very familiar with perl.  Will
> CGI::autoEscape(1) change CGI action for other users of CGI module on
> the system?  If so, maybe it will break other CGIs.

I don't know enough about mod_perl to say, but if all scripts share the
package globals from CGI, then yes, you're affecting all other scripts.
Without mod_perl, obviously you have no impact.

If it is the case, then your original fix is probably better.

-Peff

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] gitweb: Change to use explicitly function call cgi->escapHTML()
  2007-03-06 10:31       ` Li Yang-r58472
  2007-03-06 10:41         ` Jeff King
@ 2007-03-06 10:45         ` Junio C Hamano
  2007-03-06 13:23           ` Jakub Narebski
  1 sibling, 1 reply; 21+ messages in thread
From: Junio C Hamano @ 2007-03-06 10:45 UTC (permalink / raw)
  To: Li Yang-r58472; +Cc: Jeff King, Jakub Narebski, Junio C Hamano, git

"Li Yang-r58472" <LeoLi@freescale.com> writes:

>> -----Original Message-----
>> From: Jeff King [mailto:peff@peff.net]
>> ...
>> I think this should do the same, and is perhaps less magic (or maybe
>> more, depending on your perspective).
>
> Yes, it also fixed the problem.  I'm not very familiar with perl.  Will
> CGI::autoEscape(1) change CGI action for other users of CGI module on
> the system?  If so, maybe it will break other CGIs.

By "other CGIs" if you mean other independent CGI scripts that
do not have anything to do with gitweb, then I do think there is
no need to worry.

What I'd be worried about more, however, is if all the callers
of esc_html and esc_path are really expecting the full quoting
done by CGI::autoEscape(1).  I think we had some discussion on
the path quoting when we introduced quot_cec and quot_upr, but
do not recall the details.  For example, many places esc_html()
is used as the body of <a ...>$here</a> but some places it is
used as

    $cgi->a({ ... -title =>esc_html($fullname) }, esc_path($dir))

which would be the same as:

    print '<a title="' . esc_html($fullname) . '">' . esc_path($dir) . '</a>';

which may or may not be right (I do not know offhand).

Speaking of -title, I see "sub git_project_list_body" does this:

    $cgi->a({ ... -title => $pr->{'descr_long'}}, esc_html($pr->{'descr'}));
	
which seems inconsistent with the earlier quoted $fullname
handling (unless $pr->{'descr_long'} is already quoted and $pr->{'descr'}
is not, which I find highly unlikely).

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] gitweb: Change to use explicitly function call cgi->escapHTML()
  2007-03-06 10:41         ` Jeff King
@ 2007-03-06 10:53           ` Junio C Hamano
  2007-03-06 10:56             ` Jeff King
  0 siblings, 1 reply; 21+ messages in thread
From: Junio C Hamano @ 2007-03-06 10:53 UTC (permalink / raw)
  To: Jeff King; +Cc: Li Yang-r58472, Jakub Narebski, git

Jeff King <peff@peff.net> writes:

> On Tue, Mar 06, 2007 at 06:31:23PM +0800, Li Yang-r58472 wrote:
>
>> Yes, it also fixed the problem.  I'm not very familiar with perl.  Will
>> CGI::autoEscape(1) change CGI action for other users of CGI module on
>> the system?  If so, maybe it will break other CGIs.
>
> I don't know enough about mod_perl to say, but if all scripts share the
> package globals from CGI, then yes, you're affecting all other scripts.
> Without mod_perl, obviously you have no impact.
>
> If it is the case, then your original fix is probably better.

But then you are letting _other_ mod_perl users to affect your
behaviour, aren't you?  "sub autoEscape" does this:

       sub autoEscape {
           my($self,$escape) = self_or_default(@_);
           my $d = $self->{'escape'};
           $self->{'escape'} = $escape;
           $d;
       }

If we worry about mod_perl (provided if $CGI::Q is shared across
mod_perl users), I suspect we would need to be a bit more
paranoid, perhaps like this, woudln't we?

---
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 653ca3c..9c4e060 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -26,6 +26,7 @@ our $cgi = new CGI;
 our $version = "++GIT_VERSION++";
 our $my_url = $cgi->url();
 our $my_uri = $cgi->url(-absolute => 1);
+$cgi->autoEscape(1);
 
 # core git executable to use
 # this can just be "git" if your webserver has a sensible PATH

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* Re: [PATCH] gitweb: Change to use explicitly function call cgi->escapHTML()
  2007-03-06 10:53           ` Junio C Hamano
@ 2007-03-06 10:56             ` Jeff King
  2007-03-06 10:58               ` Junio C Hamano
  0 siblings, 1 reply; 21+ messages in thread
From: Jeff King @ 2007-03-06 10:56 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Li Yang-r58472, Jakub Narebski, git

On Tue, Mar 06, 2007 at 02:53:07AM -0800, Junio C Hamano wrote:

> But then you are letting _other_ mod_perl users to affect your
> behaviour, aren't you?  "sub autoEscape" does this:

Yes (but I don't know how mod_perl works, and I haven't been able to
find a simple answer by skimming the docs).

> If we worry about mod_perl (provided if $CGI::Q is shared across
> mod_perl users), I suspect we would need to be a bit more
> paranoid, perhaps like this, woudln't we?
> [...]
> +$cgi->autoEscape(1);

That rebreaks the original problem, though. Calling escapeHTML doesn't
look at $cgi, it looks at $Q (the "default" CGI object). I believe
escape is _already_ set to 1 for $cgi (which is why the $cgi->escapeHTML
patch worked).

-Peff

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] gitweb: Change to use explicitly function call cgi->escapHTML()
  2007-03-06 10:56             ` Jeff King
@ 2007-03-06 10:58               ` Junio C Hamano
  2007-03-06 11:01                 ` Jeff King
  0 siblings, 1 reply; 21+ messages in thread
From: Junio C Hamano @ 2007-03-06 10:58 UTC (permalink / raw)
  To: Jeff King; +Cc: Li Yang-r58472, Jakub Narebski, git

Jeff King <peff@peff.net> writes:

> On Tue, Mar 06, 2007 at 02:53:07AM -0800, Junio C Hamano wrote:
>
>> But then you are letting _other_ mod_perl users to affect your
>> behaviour, aren't you?  "sub autoEscape" does this:
>
> Yes (but I don't know how mod_perl works, and I haven't been able to
> find a simple answer by skimming the docs).
>
>> If we worry about mod_perl (provided if $CGI::Q is shared across
>> mod_perl users), I suspect we would need to be a bit more
>> paranoid, perhaps like this, woudln't we?
>> [...]
>> +$cgi->autoEscape(1);
>
> That rebreaks the original problem, though.

Sorry, what I meant to say was on top of Li's patch.

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] gitweb: Change to use explicitly function call cgi->escapHTML()
  2007-03-06 10:58               ` Junio C Hamano
@ 2007-03-06 11:01                 ` Jeff King
  2007-03-06 11:05                   ` Junio C Hamano
  2007-03-06 11:07                   ` Li Yang-r58472
  0 siblings, 2 replies; 21+ messages in thread
From: Jeff King @ 2007-03-06 11:01 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Li Yang-r58472, Jakub Narebski, git

On Tue, Mar 06, 2007 at 02:58:37AM -0800, Junio C Hamano wrote:

> Sorry, what I meant to say was on top of Li's patch.

Ah, I understand your point now. Yes, if other mod_perl CGIs can impact
the value, then we should definitely set it explicitly, as per your
patch (and we should use Li's patch for safety, then, not mine).

-Peff

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] gitweb: Change to use explicitly function call cgi->escapHTML()
  2007-03-06 11:01                 ` Jeff King
@ 2007-03-06 11:05                   ` Junio C Hamano
  2007-03-06 11:07                     ` Jeff King
  2007-03-06 11:07                   ` Li Yang-r58472
  1 sibling, 1 reply; 21+ messages in thread
From: Junio C Hamano @ 2007-03-06 11:05 UTC (permalink / raw)
  To: Jeff King; +Cc: Li Yang-r58472, Jakub Narebski, git

Jeff King <peff@peff.net> writes:

> On Tue, Mar 06, 2007 at 02:58:37AM -0800, Junio C Hamano wrote:
>
>> Sorry, what I meant to say was on top of Li's patch.
>
> Ah, I understand your point now. Yes, if other mod_perl CGIs can impact
> the value, then we should definitely set it explicitly, as per your
> patch (and we should use Li's patch for safety, then, not mine).

Reading "sub autoEscape", "sub escapeHTML" and "sub
self_or_default" again, I think other people cannot affect the
value of our $cgi->{'escape'} by calling autoEscape, so what I
said is probably bogus.  Let's use Li's original patch.

^ permalink raw reply	[flat|nested] 21+ messages in thread

* RE: [PATCH] gitweb: Change to use explicitly function call cgi->escapHTML()
  2007-03-06 11:01                 ` Jeff King
  2007-03-06 11:05                   ` Junio C Hamano
@ 2007-03-06 11:07                   ` Li Yang-r58472
  1 sibling, 0 replies; 21+ messages in thread
From: Li Yang-r58472 @ 2007-03-06 11:07 UTC (permalink / raw)
  To: Jeff King, Junio C Hamano; +Cc: Jakub Narebski, git

> -----Original Message-----
> From: Jeff King [mailto:peff@peff.net]
> Sent: Tuesday, March 06, 2007 7:02 PM
> To: Junio C Hamano
> Cc: Li Yang-r58472; Jakub Narebski; git@vger.kernel.org
> Subject: Re: [PATCH] gitweb: Change to use explicitly function call
> cgi->escapHTML()
> 
> On Tue, Mar 06, 2007 at 02:58:37AM -0800, Junio C Hamano wrote:
> 
> > Sorry, what I meant to say was on top of Li's patch.
> 
> Ah, I understand your point now. Yes, if other mod_perl CGIs can
impact
> the value, then we should definitely set it explicitly, as per your
> patch (and we should use Li's patch for safety, then, not mine).

I agree.

-Leo

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] gitweb: Change to use explicitly function call cgi->escapHTML()
  2007-03-06 11:05                   ` Junio C Hamano
@ 2007-03-06 11:07                     ` Jeff King
  0 siblings, 0 replies; 21+ messages in thread
From: Jeff King @ 2007-03-06 11:07 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Li Yang-r58472, Jakub Narebski, git

On Tue, Mar 06, 2007 at 03:05:55AM -0800, Junio C Hamano wrote:

> > Ah, I understand your point now. Yes, if other mod_perl CGIs can impact
> > the value, then we should definitely set it explicitly, as per your
> > patch (and we should use Li's patch for safety, then, not mine).
> 
> Reading "sub autoEscape", "sub escapeHTML" and "sub
> self_or_default" again, I think other people cannot affect the
> value of our $cgi->{'escape'} by calling autoEscape, so what I
> said is probably bogus.  Let's use Li's original patch.

Er, sorry, yes, I just accidentally agreed with your bogosity (while
figuring out what you originally meant, I forgot which CGI we were
talking about!). So I agree, Li's original is sufficient. Sorry for the
noise. :)

-Peff

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] gitweb: Change to use explicitly function call cgi->escapHTML()
  2007-03-06 10:45         ` Junio C Hamano
@ 2007-03-06 13:23           ` Jakub Narebski
  2007-03-06 23:17             ` Junio C Hamano
  0 siblings, 1 reply; 21+ messages in thread
From: Jakub Narebski @ 2007-03-06 13:23 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Li Yang-r58472, Jeff King, git

Junio C Hamano wrote:

> Speaking of -title, I see "sub git_project_list_body" does this:
> 
>     $cgi->a({ ... -title => $pr->{'descr_long'}}, esc_html($pr->{'descr'}));
>         
> which seems inconsistent with the earlier quoted $fullname
> handling (unless $pr->{'descr_long'} is already quoted and $pr->{'descr'}
> is not, which I find highly unlikely).

CGI::a() subroutine automatically quotes properly _attribute_ values,
but it does not (and it should not) quote _contents_ of a tag.

So the above code is correct.

-- 
Jakub Narebski
Poland

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] gitweb: Change to use explicitly function call cgi->escapHTML()
  2007-03-06 13:23           ` Jakub Narebski
@ 2007-03-06 23:17             ` Junio C Hamano
  2007-03-07  0:37               ` Jakub Narebski
  0 siblings, 1 reply; 21+ messages in thread
From: Junio C Hamano @ 2007-03-06 23:17 UTC (permalink / raw)
  To: Jakub Narebski; +Cc: Li Yang-r58472, Jeff King, git

Jakub Narebski <jnareb@gmail.com> writes:

> Junio C Hamano wrote:
>
>> Speaking of -title, I see "sub git_project_list_body" does this:
>> 
>>     $cgi->a({ ... -title => $pr->{'descr_long'}}, esc_html($pr->{'descr'}));
>>         
>> which seems inconsistent with the earlier quoted $fullname
>> handling (unless $pr->{'descr_long'} is already quoted and $pr->{'descr'}
>> is not, which I find highly unlikely).
>
> CGI::a() subroutine automatically quotes properly _attribute_ values,
> but it does not (and it should not) quote _contents_ of a tag.
>
> So the above code is correct.

Sorry, you lost me...  I am wondering what you mean by
"automatically".  Do you mean 'always'?

And if that is the case, shouldn't we drop esc_html() around
$fullname here?

    ...  For example, many places esc_html()
    is used as the body of <a ...>$here</a> but some places it is
    used as

        $cgi->a({ ... -title =>esc_html($fullname) }, esc_path($dir))

as we do not have it around $pr->{'descr_long'} in the above?

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] gitweb: Change to use explicitly function call cgi->escapHTML()
  2007-03-06 23:17             ` Junio C Hamano
@ 2007-03-07  0:37               ` Jakub Narebski
  2007-03-07  0:49                 ` Junio C Hamano
  0 siblings, 1 reply; 21+ messages in thread
From: Jakub Narebski @ 2007-03-07  0:37 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Li Yang-r58472, Jeff King, git

Junio C Hamano wrote:
> Jakub Narebski <jnareb@gmail.com> writes:
>> Junio C Hamano wrote:
>>
>>> Speaking of -title, I see "sub git_project_list_body" does this:
>>> 
>>>     $cgi->a({ ... -title => $pr->{'descr_long'}}, esc_html($pr->{'descr'}));
>>>         
>>> which seems inconsistent with the earlier quoted $fullname
>>> handling (unless $pr->{'descr_long'} is already quoted and $pr->{'descr'}
>>> is not, which I find highly unlikely).
>>
>> CGI::a() subroutine automatically quotes properly _attribute_ values,
>> but it does not (and it should not) quote _contents_ of a tag.
>>
>> So the above code is correct.
> 
> Sorry, you lost me...  I am wondering what you mean by
> "automatically".  Do you mean 'always'?

Yes, I mean that CGI::a() does quoting _of attributes_, always.
 
> And if that is the case, shouldn't we drop esc_html() around
> $fullname here?
> 
>     ...  For example, many places esc_html()
>     is used as the body of <a ...>$here</a> but some places it is
>     used as
> 
>         $cgi->a({ ... -title =>esc_html($fullname) }, esc_path($dir))
> 
> as we do not have it around $pr->{'descr_long'} in the above?

The above is wrong, thrice. First, it should be esc_path($fullname).
Second, rules for escaping attribute values are different from escaping
HTML. Third, CGI::a() does escaping of attribute values.

Explanation:

  $cgi->a({ ... -attribute => atribute_value }, tag_contents)

is translated to

  <a ... attribute="attribute_value">tag_contents</a>

The rules for escaping attribute values (which are string contents) are
different. For example you have to take care about escaping embedded '"'
and "'" characters; CGI::a() does that for us automatically.

CGI::a() cannot HTML escape tag contents automatically; we might want to
write

  <a href="URL">some <b>bold</b> text</a>

for example. Soe we have to esc_html (or esc_path) if needed.


In short: escape tag contents if needed, do not escape attrbure values.
-- 
Jakub Narebski
Poland

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] gitweb: Change to use explicitly function call cgi->escapHTML()
  2007-03-07  0:37               ` Jakub Narebski
@ 2007-03-07  0:49                 ` Junio C Hamano
  2007-03-07  1:21                   ` [PATCH] gitweb: Don't escape attributes in CGI.pm HTML methods Jakub Narebski
  0 siblings, 1 reply; 21+ messages in thread
From: Junio C Hamano @ 2007-03-07  0:49 UTC (permalink / raw)
  To: Jakub Narebski; +Cc: Li Yang-r58472, Jeff King, git

Jakub Narebski <jnareb@gmail.com> writes:

> In short: escape tag contents if needed, do not escape attrbure values.

I trust a patch from you will follow shortly?

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH] gitweb: Don't escape attributes in CGI.pm HTML methods
  2007-03-07  0:49                 ` Junio C Hamano
@ 2007-03-07  1:21                   ` Jakub Narebski
  2007-03-07  1:40                     ` Junio C Hamano
  0 siblings, 1 reply; 21+ messages in thread
From: Jakub Narebski @ 2007-03-07  1:21 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Li Yang-r58472, Jeff King

There is no need to escape HTML tag's attributes in CGI.pm
HTML methods (like CGI::a()), because CGI.pm does attribute
escaping automatically.

Explanation:
  $cgi->a({ ... -attribute => atribute_value }, tag_contents)
is translated to
  <a ... attribute="attribute_value">tag_contents</a>
The rules for escaping attribute values (which are string contents) are
different. For example you have to take care about escaping embedded '"'
and "'" characters; CGI::a() does that for us automatically.

CGI::a() cannot HTML escape tag contents automatically; we might want to
write
  <a href="URL">some <b>bold</b> text</a>
for example. So we have to esc_html (or esc_path) if needed.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
---
Junio C Hamano wrote:
> Jakub Narebski <jnareb@gmail.com> writes:
> 
>> In short: escape tag contents if needed, do not escape attrbure values.
> 
> I trust a patch from you will follow shortly?

Here it is. I hope I found everything.

Commit message is bit long, so you can cut it to first sentence only
(or even only to title/subject).


 gitweb/gitweb.perl |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 653ca3c..ea58946 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -1974,17 +1974,17 @@ sub git_print_page_path {
 			$fullname .= ($fullname ? '/' : '') . $dir;
 			print $cgi->a({-href => href(action=>"tree", file_name=>$fullname,
 			                             hash_base=>$hb),
-			              -title => esc_html($fullname)}, esc_path($dir));
+			              -title => $fullname}, esc_path($dir));
 			print " / ";
 		}
 		if (defined $type && $type eq 'blob') {
 			print $cgi->a({-href => href(action=>"blob_plain", file_name=>$file_name,
 			                             hash_base=>$hb),
-			              -title => esc_html($name)}, esc_path($basename));
+			              -title => $name}, esc_path($basename));
 		} elsif (defined $type && $type eq 'tree') {
 			print $cgi->a({-href => href(action=>"tree", file_name=>$file_name,
 			                             hash_base=>$hb),
-			              -title => esc_html($name)}, esc_path($basename));
+			              -title => $name}, esc_path($basename));
 			print " / ";
 		} else {
 			print esc_path($basename);
-- 
1.5.0.2

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* Re: [PATCH] gitweb: Don't escape attributes in CGI.pm HTML methods
  2007-03-07  1:21                   ` [PATCH] gitweb: Don't escape attributes in CGI.pm HTML methods Jakub Narebski
@ 2007-03-07  1:40                     ` Junio C Hamano
  0 siblings, 0 replies; 21+ messages in thread
From: Junio C Hamano @ 2007-03-07  1:40 UTC (permalink / raw)
  To: Jakub Narebski; +Cc: git, Li Yang-r58472, Jeff King

Jakub Narebski <jnareb@gmail.com> writes:

> There is no need to escape HTML tag's attributes in CGI.pm
> HTML methods (like CGI::a()), because CGI.pm does attribute
> escaping automatically.
>
> Explanation:
>   $cgi->a({ ... -attribute => atribute_value }, tag_contents)
> is translated to
>   <a ... attribute="attribute_value">tag_contents</a>
> The rules for escaping attribute values (which are string contents) are
> different. For example you have to take care about escaping embedded '"'
> and "'" characters; CGI::a() does that for us automatically.
>
> CGI::a() cannot HTML escape tag contents automatically; we might want to
> write
>   <a href="URL">some <b>bold</b> text</a>
> for example. So we have to esc_html (or esc_path) if needed.
>
> Signed-off-by: Jakub Narebski <jnareb@gmail.com>
> ---
> Junio C Hamano wrote:
>> Jakub Narebski <jnareb@gmail.com> writes:
>> 
>>> In short: escape tag contents if needed, do not escape attrbure values.
>> 
>> I trust a patch from you will follow shortly?
>
> Here it is. I hope I found everything.
>
> Commit message is bit long, so you can cut it to first sentence only
> (or even only to title/subject).

Thanks.  I think your explanation in the log message has the
right amount of details and keeping it there would help people
who would want to later touch the code.

^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2007-03-07  1:40 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-03-06  3:58 [PATCH] gitweb: Change to use explicitly function call cgi->escapHTML() Li Yang
2007-03-06  6:55 ` Junio C Hamano
2007-03-06  9:34   ` Jakub Narebski
2007-03-06  9:39     ` Jeff King
2007-03-06  9:46       ` Junio C Hamano
2007-03-06 10:31       ` Li Yang-r58472
2007-03-06 10:41         ` Jeff King
2007-03-06 10:53           ` Junio C Hamano
2007-03-06 10:56             ` Jeff King
2007-03-06 10:58               ` Junio C Hamano
2007-03-06 11:01                 ` Jeff King
2007-03-06 11:05                   ` Junio C Hamano
2007-03-06 11:07                     ` Jeff King
2007-03-06 11:07                   ` Li Yang-r58472
2007-03-06 10:45         ` Junio C Hamano
2007-03-06 13:23           ` Jakub Narebski
2007-03-06 23:17             ` Junio C Hamano
2007-03-07  0:37               ` Jakub Narebski
2007-03-07  0:49                 ` Junio C Hamano
2007-03-07  1:21                   ` [PATCH] gitweb: Don't escape attributes in CGI.pm HTML methods Jakub Narebski
2007-03-07  1:40                     ` Junio C Hamano

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).