[rt-devel] RT 3.0.3rc2
Dmitry Sivachenko
mitya at cavia.pp.ru
Thu Jun 19 04:59:07 EDT 2003
On Thu, Jun 19, 2003 at 04:44:58PM +0800, Autrijus Tang wrote:
> On Thu, Jun 19, 2003 at 12:11:48PM +0400, Dmitry Sivachenko wrote:
> > 1) When I am sending http://mitya.pp.ru/rt-bad-email1.dat, the following
> > appears in the maillog:
>
> That mail has the extremely evil header:
>
> From: =?UNKNOWN?Q?=C8=ED=F2=E5=F0=ED=E5=F2_=EC=E0=F0=EA=E5=F2=E8=ED=E3?=
>
> and RT simply does not know how to handle this encoding.
Yes, you are right.
But RT should not crash regardless what it's input is, obviously...
>
> I have committed the patch below into my branch which takes care of
> this case by applying the same _GuessCharset routine to MIME words.
Thanks, I'll test it.
>
> As for your second problem, I can't duplicate it -- but maybe you'd
> like to check your @EmailOutputEncoding?
In my RT_SiteConfig.pm:
Set($EmailOutputEncoding , 'koi8-r');
>
> Thanks,
> /Autrijus/
>
> --- //depot/RT/rt/lib/RT/I18N.pm 2003/06/19 08:03:42
> +++ //depot/RT/rt/lib/RT/I18N.pm 2003/06/19 08:34:19
> @@ -273,7 +273,11 @@
> # now we have got a decoded subject, try to convert into
> # utf-8 encoding
> unless ($charset =~ m/utf-8/i) {
> - Encode::from_to($enc_str, $charset, "utf8");
> + eval { Encode::from_to($enc_str, $charset, "utf8") };
> + if ($@) {
> + $charset = _GuessCharset( $enc_str );
> + Encode::from_to($enc_str, $charset, "utf8");
> + }
> }
>
> $str .= $prefix . $enc_str . $trailing;
> @@ -296,17 +300,33 @@
> sub _FindOrGuessCharset {
> my $entity = shift;
> my $head = $entity->head;
> - my $charset;
> - my $fallback = 'iso-8859-1';
>
> - return $charset if ($charset = $head->mime_attr("content-type.charset"));
> + if ($head->mime_attr("content-type.charset")) {
> + return $head->mime_attr("content-type.charset");
> + }
>
> my $body = $entity->bodyhandle or return;
> - return 'utf-8' if Encode::is_utf8( $body->as_string );
> + return _GuessCharset( $head->as_string . $body->as_string );
> +}
> +
> +# }}}
> +
> +
> +# {{{ _GuessCharset
> +
> +=head2 _GuessCharset STRING
> +
> +use Encode::Guess to try to figure it out the string's encoding.
> +
> +=cut
> +
> +sub _GuessCharset {
> + my $fallback = 'iso-8859-1';
> + my $charset;
>
> if ( @RT::EmailInputEncodings and eval { require Encode::Guess; 1 } ) {
> Encode::Guess->set_suspects(@RT::EmailInputEncodings);
> - my $decoder = Encode::Guess->guess( $head->as_string . $body->as_string );
> + my $decoder = Encode::Guess->guess( $_[0] );
>
> if ( ref $decoder ) {
> $charset = $decoder->name;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url : http://pallas.eruditorum.org/pipermail/rt-devel/attachments/20030619/074a6549/attachment.pgp
More information about the Rt-devel
mailing list