From: Jeffrey Stedfast Date: Tue, 24 Jul 2001 22:23:40 +0000 (+0000) Subject: Handle broken mailers that send unencoded 8bit header params. And there X-Git-Tag: upstream/3.7.4~10789 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9342bfb6aa682861a9d7e27a3124f9b15cc5b3be;p=platform%2Fupstream%2Fevolution-data-server.git Handle broken mailers that send unencoded 8bit header params. And there 2001-07-24 Jeffrey Stedfast * camel-mime-utils.c (header_decode_param): Handle broken mailers that send unencoded 8bit header params. And there was much rejoicing. Rah. --- diff --git a/camel/ChangeLog b/camel/ChangeLog index 59cadc3..5498414 100644 --- a/camel/ChangeLog +++ b/camel/ChangeLog @@ -1,5 +1,9 @@ 2001-07-24 Jeffrey Stedfast + * camel-mime-utils.c (header_decode_param): Handle broken mailers + that send unencoded 8bit header params. And there was much + rejoicing. Rah. + * camel-url.h (CAMEL_URL_HIDE_ALL): New #define, and there was much rejoicing. Rah. diff --git a/camel/camel-mime-utils.c b/camel/camel-mime-utils.c index e5c90da..f8e4745 100644 --- a/camel/camel-mime-utils.c +++ b/camel/camel-mime-utils.c @@ -1970,6 +1970,43 @@ header_decode_param (const char **in, char **paramp, char **valuep, int *is_rfc2 } } + if (!g_utf8_validate (value, -1, NULL)) { + /* The (broken) mailer sent us an unencoded 8bit value + * attempt to save it by assuming it's in the user's + * locale and converting to utf8 */ + char *outbase, *outbuf, *p; + const char *inbuf; + int inlen, outlen; + iconv_t ic; + + inbuf = value; + inlen = strlen (inbuf); + + ic = iconv_open ("UTF-8", camel_charset_locale_name ()); + if (ic != (iconv_t) -1) { + int ret; + + outlen = inlen * 6 + 16; + outbuf = outbase = g_malloc (outlen); + + ret = iconv (ic, &inbuf, &inlen, &outbuf, &outlen); + if (ret >= 0) { + iconv (ic, NULL, 0, &outbuf, &outlen); + *outbuf = '\0'; + } + + iconv_close (ic); + + g_free (value); + value = outbase; + } else { + /* Okay, so now what? I guess we convert invalid chars to _'s? */ + for (p = value; *p; p++) + if (!isascii ((unsigned) *p)) + *p = '_'; + } + } + if (param && value) { *paramp = param; *valuep = value;