Monday 03 December 2007 Tarihinde 12:14:43 yazmıştı:
Benjamin Close [off-list ref] writes:
quoted
quoted
From 83042abf3967b455953cddeab43e33c1d59c6f03 Mon Sep 17 00:00:00 2001
From: Benjamin Close <redacted>
Date: Sun, 2 Dec 2007 15:09:00 -0800
Subject: [PATCH] Gitweb: Fix encoding to always translate rather than
sometimes fail
When performing the utf translation don't test if $res is defined.
It appears that it is defined even when the conversion fails. This causes
failures on the writing of the output stream which is expecting UTF.
@@ -696,12 +696,8 @@ sub validate_refname {
sub to_utf8 {
my $str = shift;
my $res;
- eval { $res = decode_utf8($str, Encode::FB_CROAK); };
- if (defined $res) {
- return $res;
- } else {
- return decode($fallback_encoding, $str, Encode::FB_DEFAULT);
- }
+ eval { return ($res = decode_utf8($str, Encode::FB_CROAK)); };
+ return decode($fallback_encoding, $str, Encode::FB_DEFAULT);
}
This is funny.
I thought the standard catch ... throw idiom in Perl was to do the above
like this:
my $res;
eval { $res = decode_utf8($str, Encode::FB_CROAK); };
if ($@) {
return decode($fallback_encoding, $str, Encode::FB_DEFAULT);
}
return $res;
I think this is correct, but the current code in gitweb doesn't look correct
since it checks for $res and not $@.
Regards,
ismail
--
Never learn by your mistakes, if you do you may never dare to try again.