tShow invalid encodings in parameters and headers. - rohrpost - A commandline mail client to change the world as we see it.
 (HTM) git clone git://r-36.net/rohrpost
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) LICENSE
       ---
 (DIR) commit 4ea5edb75b238c6ca704690100128f1fe95e1d7b
 (DIR) parent 9e407ff5f1deb97e2e7a0e5531d08b50544638a3
 (HTM) Author: Christoph Lohmann <20h@r-36.net>
       Date:   Sun,  2 Apr 2017 17:40:12 +0200
       
       Show invalid encodings in parameters and headers.
       
       Diffstat:
         mime.c                              |      23 +++++++++++++----------
       
       1 file changed, 13 insertions(+), 10 deletions(-)
       ---
 (DIR) diff --git a/mime.c b/mime.c
       t@@ -118,6 +118,8 @@ mime_iconv(char *str, char *from, char *to)
                if (ifd == (iconv_t)-1)
                        return NULL;
        
       +        //printf("mime_iconv: '%s'; from='%s'\n", str, from);
       +
                left = strlen(str);
                olen = left / 2;
                avail = olen;
       t@@ -153,7 +155,7 @@ mime_iconv(char *str, char *from, char *to)
        char *
        mime_decodeheaderext(char *value)
        {
       -        char *work, *cret, *ret, *cs, *str, *enc, *ast;
       +        char *work, *cret, *ret, *cs, *str, *enc, *ast, *dstr;
                int len, slen;
        
                len = strlen(value);
       t@@ -209,12 +211,13 @@ mime_decodeheaderext(char *value)
                        break;
                }
        
       +        //printf("mime_decodeheader: mime_iconv str='%s'; cret='%s';\n", str, cret);
                if (cret != NULL) {
                        free(ret);
                        if (strcasecmp(cs, "utf-8")) {
       -                        str = mime_iconv(cret, cs, "UTF-8");
       -                        if (str == NULL)
       -                                str = cret;
       +                        dstr = mime_iconv(cret, cs, "UTF-8");
       +                        if (dstr == NULL)
       +                                str = smprintf("ERR(%s)", str);
                                free(cret);
                        } else {
                                str = cret;
       t@@ -342,6 +345,7 @@ mime_guessheader(char *value)
        
                gcs = NULL;
        
       +        //printf("mime_guessheader '%s'\n", value);
                nvalue = value;
                if (!strisascii(value)) {
                        /*
       t@@ -359,7 +363,7 @@ mime_guessheader(char *value)
                        }
                }
        
       -        value  = mime_decodeheader(nvalue);
       +        value = mime_decodeheader(nvalue);
                if (gcs != NULL)
                        free(nvalue);
                return value;
       t@@ -368,7 +372,7 @@ mime_guessheader(char *value)
        char *
        mime_decodeparam(char *value)
        {
       -        char *work, *cret, *ret, *cs, *str, *lang;
       +        char *work, *cret, *ret, *cs, *str, *lang, *dstr;
                int len, slen;
        
                len = strlen(value);
       t@@ -397,10 +401,9 @@ mime_decodeparam(char *value)
                if (cret != NULL) {
                        if (strcasecmp(cs, "utf-8")) {
                                free(ret);
       -                        str = mime_iconv(cret, cs, "UTF-8");
       -                        if (str == NULL) {
       -                                str = cret;
       -                        }
       +                        dstr = mime_iconv(cret, cs, "UTF-8");
       +                        if (dstr == NULL)
       +                                str = smprintf("ERR(%s)", str);
                                free(cret);
                        } else {
                                free(ret);