tThe first parameter has no MIME ordering. - 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 83d97648a2f3a717c8051c8b6e8707c01a135631
 (DIR) parent beaef0773ca348cf3d8a5dca947190ac5aa3c601
 (HTM) Author: Christoph Lohmann <20h@r-36.net>
       Date:   Sun, 23 Jul 2017 18:16:55 +0200
       
       The first parameter has no MIME ordering.
       
       Diffstat:
         mime.c                              |      25 ++++++++++++++++++++++---
         view.c                              |       1 +
       
       2 files changed, 23 insertions(+), 3 deletions(-)
       ---
 (DIR) diff --git a/mime.c b/mime.c
       t@@ -523,10 +523,18 @@ mime_sanitizeparams(llist_t *params)
                llistelem_t *param, *hit, *nparam;
                llist_t *reorder, *hits;
                char *key, *nvalue;
       -        int klen, i;
       +        int klen, i, n;
        
                reorder = llist_new();
       +        //printf("mime_sanitizeparams: start\n");
       +        n = 0;
                forllist(params, param) {
       +                if (n == 0) {
       +                        llist_add(reorder, param->key, NULL, 0);
       +                        n++;
       +                        continue;
       +                }
       +
                        key = param->key;
                        klen = strlen(key);
        
       t@@ -602,6 +610,7 @@ mime_parseheader(char *field)
        
                tok = buf;
                ret = llist_new();
       +        //printf("mime_parseheader: buf = '%s'\n", buf);
                while (tok[0] != '\0') {
                        key = NULL;
                        value = NULL;
       t@@ -616,11 +625,13 @@ mime_parseheader(char *field)
                                tok[tlen-1] = '\0';
                                tlen--;
                        }
       +                //printf("mime_parseheader: after sanitize: tok = '%s'\n", tok);
        
                        /*
                         * 1.) ([\t\r\v\f ]*)key
                         */
                        key = tok + strspn(tok, "\t\r\v\f ");
       +                //printf("mime_parseheader: key = '%s'\n", tok);
        
                        /*
                         * 2.) key
       t@@ -629,13 +640,16 @@ mime_parseheader(char *field)
                        if (tok[0] == ';' || tok[0] == '\0') {
                                quot = tok[0];
                                tok[0] = '\0';
       -                        if (strlen(key) > 0)
       +                        if (strlen(key) > 0) {
       +                                //printf("mime_parseheader: add key '%s'\n", key);
                                        llist_add(ret, key, NULL, 0);
       +                        }
                                if (quot != '\0')
                                        tok++;
                                continue;
                        }
        
       +                //printf("mime_parseheader: tok = '%s'\n", tok);
                        if (tok[0] == '=') {
                                eq = tok;
                        } else {
       t@@ -704,11 +718,12 @@ mime_parseheader(char *field)
                                break;
                        }
        
       +                //printf("mime_parseheader: add %s = '%s'\n", key, value);
                        llist_add(ret, key, value, strlen(value)+1);
                }
                free(buf);
        
       -        if (ret->len > 0)
       +        if (ret->len > 1)
                        return mime_sanitizeparams(ret);
        
                llist_free(ret);
       t@@ -868,6 +883,7 @@ mime_parsebufintern(mime_t *mime, char *str, int len)
                rp = str;
                p = str;
                for (; (rp = sgets(buf, sizeof(buf)-1, &p));) {
       +                //printf("line '%s'\n", buf);
                        blen = strlen(buf);
                        if (buf[blen-1] == '\r')
                                buf[blen-1] = '\0';
       t@@ -960,6 +976,7 @@ mimeparsebufagain:
                                break;
                        }
                }
       +        //printf("return mime_preparepart\n");
                return mime_preparepart(mime);
        
        mimeparsebufbodyparse:
       t@@ -980,6 +997,8 @@ mimeparsebufbodyparse:
                        //printf("mime->body = \"%s\"\n", mime->body);
        
                        return mime;
       +        } else {
       +                //printf("There is a boundary.\n");
                }
        
                partlen = 0;
 (DIR) diff --git a/view.c b/view.c
       t@@ -425,6 +425,7 @@ viewmain(int argc, char *argv[])
                        ide = llist_get((llist_t *)msg->data, "id");
                        if (ide == NULL)
                                continue;
       +
                        mime = mime_parsebuf((char *)elem->data, elem->datalen);
                        if (mime == NULL)
                                continue;