From: Junio C Hamano <gitster@pobox.com>
To: Jakub Narebski <jnareb@gmail.com>
Cc: Anders Waldenborg <anders@0x63.nu>, git@vger.kernel.org
Subject: Re: [PATCH] gitweb: Fix chop_str not to cut in middle of utf8 multibyte chars.
Date: Wed, 21 May 2008 00:27:55 -0700 [thread overview]
Message-ID: <7vve185d6s.fsf@gitster.siamese.dyndns.org> (raw)
In-Reply-To: m3lk244o16.fsf@localhost.localdomain
Jakub Narebski <jnareb@gmail.com> writes:
> Anders Waldenborg <anders@0x63.nu> writes:
> ...
> Fix chop_str not to cut in middle of utf8 multibyte chars. Without
> this fix at least author name in short log may cut in middle of a
> multibyte char. When the result comes to esc_html to_utf8 is called
> again, which doesn't find valid utf8 and decodes using
> $fallback_encoding making it even worse.
>
>> Signed-off-by: Anders Waldenborg <anders@0x63.nu>
>> ---
>> gitweb/gitweb.perl | 4 ++++
>> 1 files changed, 4 insertions(+), 0 deletions(-)
>>
>> diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
>> index 2facf2d..8308e22 100755
>> --- a/gitweb/gitweb.perl
>> +++ b/gitweb/gitweb.perl
>> @@ -866,6 +866,10 @@ sub chop_str {
>> my $add_len = shift || 10;
>> my $where = shift || 'right'; # 'left' | 'center' | 'right'
>>
>> + # Make sure perl knows it is utf8 encoded so we don't
>> + # cut in the middle of a utf8 multibyte char.
>> + $str = to_utf8($str);
>> +
>
> I like the comment here. It explains the whys of code.
>
>> # allow only $len chars, but don't cut a word if it would fit in $add_len
>> # if it doesn't fit, cut it if it's still longer than the dots we would add
>> # remove chopped character entities entirely
>>
>
> This patch is whitespace damaged, by the way.
I haven't followed the codepath but what do the callers do to the string
returned from chop_str? Don't they assume the string hasn't been decoded
(because the old implementation of chop_str did not do this to_utf8), and
emit the result directly to the output because it also assumes the
undecoded format is what the outside world wants? In other words, don't
they now need to do different things because returned string has gone
through the to_utf8() processing already?
Maybe I am worrying too much, after getting burned by decode_utf/encode_utf
data chains in another popular scripting language, and it is possible that
with Perl you may not have to be so careful...
next prev parent reply other threads:[~2008-05-21 7:29 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-20 20:55 [PATCH] gitweb: Fix chop_str not to cut in middle of utf8 multibyte chars Anders Waldenborg
2008-05-20 22:19 ` Jakub Narebski
2008-05-21 7:27 ` Junio C Hamano [this message]
2008-05-21 7:45 ` Anders Waldenborg
2008-05-24 13:34 ` Jakub Narebski
2008-05-21 11:44 ` [PATCH] gitweb: Convert string to internal form before chopping in chop_str Anders Waldenborg
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=7vve185d6s.fsf@gitster.siamese.dyndns.org \
--to=gitster@pobox.com \
--cc=anders@0x63.nu \
--cc=git@vger.kernel.org \
--cc=jnareb@gmail.com \
/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).