X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Ffmt_rfc2047.c;h=687ea5774913c079f72389e96dfd16ed7287a347;hp=dc123e53fd8f177facabe633e5544aeb1782e35b;hb=a4ff68e851c0931ced437f73a1acb0fedb28bec3;hpb=714b5c530ece27ea2835a313013f5b770163403c diff --git a/sbr/fmt_rfc2047.c b/sbr/fmt_rfc2047.c index dc123e5..687ea57 100644 --- a/sbr/fmt_rfc2047.c +++ b/sbr/fmt_rfc2047.c @@ -125,22 +125,25 @@ decode_rfc2047(char *str, char *dst, size_t dstlen) if (!*pp) continue; + *pp = '\0'; /* Check if character set can be handled natively */ - if (!check_charset(startofmime, pp - startofmime)) { + if (!is_native_charset(startofmime)) { #ifdef HAVE_ICONV /* .. it can't. We'll use iconv then. */ - *pp = '\0'; cd = iconv_open(get_charset(), startofmime); fromutf8 = !mh_strcasecmp(startofmime, "UTF-8"); *pp = '?'; - if (cd == (iconv_t)-1) continue; + if (cd == (iconv_t)-1) + continue; use_iconv = 1; #else + *pp = '?'; continue; #endif } + *pp = '?'; startofmime = pp + 1; /* Check for valid encoding type */ @@ -206,7 +209,7 @@ decode_rfc2047(char *str, char *dst, size_t dstlen) if (use_iconv) { saveq = q; savedstlen = dstlen; - q = convbuf = (char *) mh_xmalloc(endofmime - startofmime); + q = convbuf = mh_xcalloc(endofmime - startofmime, sizeof(char)); } /* ** ADDCHR2 is for adding characters when q is or might be convbuf: @@ -243,14 +246,16 @@ decode_rfc2047(char *str, char *dst, size_t dstlen) while (pp < endofmime) { /* 6 + 2 bits */ while ((pp < endofmime) && - ((c1 = char64(*pp)) == -1)) { + ((c1 = char64(*pp)) + == -1)) { pp++; } if (pp < endofmime) { pp++; } while ((pp < endofmime) && - ((c2 = char64(*pp)) == -1)) { + ((c2 = char64(*pp)) + == -1)) { pp++; } if (pp < endofmime && c1 != -1 && c2 != -1) { @@ -259,7 +264,8 @@ decode_rfc2047(char *str, char *dst, size_t dstlen) } /* 4 + 4 bits */ while ((pp < endofmime) && - ((c3 = char64(*pp)) == -1)) { + ((c3 = char64(*pp)) + == -1)) { pp++; } if (pp < endofmime && c2 != -1 && c3 != -1) { @@ -268,7 +274,8 @@ decode_rfc2047(char *str, char *dst, size_t dstlen) } /* 2 + 6 bits */ while ((pp < endofmime) && - ((c4 = char64(*pp)) == -1)) { + ((c4 = char64(*pp)) + == -1)) { pp++; } if (pp < endofmime && c3 != -1 && c4 != -1) { @@ -311,8 +318,12 @@ decode_rfc2047(char *str, char *dst, size_t dstlen) break; /* skip to next input character */ if (fromutf8) { - for (start++;(start < q) && ((*start & 192) == 128);start++) + inbytes--; + start++; + while ((start < q) && ((*start & 192) == 128)) { + start++; inbytes--; + } } else start++, inbytes--; if (start >= q) @@ -330,7 +341,7 @@ decode_rfc2047(char *str, char *dst, size_t dstlen) if (!dstlen || !savedstlen) goto buffull; dstlen = savedstlen; - free(convbuf); + mh_free0(&convbuf); } #endif