Sunday, 10 February 2008

christmas vacation hacks



Christmas Vacation Hacks

Evolution

There's been discussion about Evolution not handling some brokenly

rfc2047 encoded message headers recently, so I ported some workaround

logic from GMime to Camel yesterday. I think this should turn a lot of

frowns upside down when Evolution 2.22 is released. The new rfc2047

header decoder in Evolution is now more accepting than Thunderbird's

decoder[1], so I hope this will satisfy everyone.

The new rfc2047 decoder will now handle the following cases:

* encoded-words embedded inside other tokens (e.g

n=?iso-8859-1?q?a=EF?=ve)

* encoded-words with LWSP in the encoded-text section (e.g.

=?iso-8859-1?q?Look ma! there's spaces!?=)

* some encoded-word tokens with unencoded special chars in the

encoded-text section (such as ? marks and other specials -

obviously this can't always work if a special sequence occurrs)

* encoded-word tokens with no LWSP between them

* no longer aborts if the encoded-text cannot be completely

converted to UTF-8 from the charset provided, instead it will

attempt to find a more suitable charset to use for conversion

and/or replace invalid byte sequences with a '?'

This should fix all of the more common broken-mailer cases, or at

least all of the ones that are worth even bothering to try and work

around.

GMime

Did some digging and discovered how to document more things using

gtk-doc, so GMime's documentation has been getting improved. All of

the public functions in GMime now appear in the documentation (I had

forgotten to add some of the newer API additions to the

gmime-sections.txt file) as well as began writing documentation for

each of the doc sections (which I hadn't known how to document

previously).

You can find up-to-the-minute GMime documentation here as I continue

to chug away at expanding it.

While porting GMime's rfc2047 decoding logic to Evolution, I

discovered some areas I could improve in GMime too.

1. After having ported my GMime decoder logic to Camel, I was curious

to see how Thunderbird handled broken rfc2047 encoded headers and so

had myself a peek at

mozilla/netwerk/mime/src/nsMIMEHeaderParamImpl.cpp and noted that my

new logic in Camel would handle everything that Thunderbird would

handle and more.

I also took a peek at KMail's rfc2047 header decoding logic and

discovered Evolution is now more flexible than it as well (again,

Evolution now handles everything that KMail's decoder handles and

more).


No comments: