X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fsrc%2Fmime.c;h=ab701f2a682e59f0adeeefb24e4e9344b9c792fd;hb=805c9d531fcf74099459cc57e520a59b472e0de5;hp=6a9e31a0aa5e5aaf20a5868956c435cb316c431d;hpb=c007c9748e22d0d518cf254f31504d4a7a4db1ee;p=user%2Fhenk%2Fcode%2Fexim.git diff --git a/src/src/mime.c b/src/src/mime.c index 6a9e31a0a..ab701f2a6 100644 --- a/src/src/mime.c +++ b/src/src/mime.c @@ -601,19 +601,37 @@ NEXT_PARAM_SEARCH: int param_value_len = 0; /* found an interesting parameter? */ - if (strncmpic(mp->name, p,mp->namelen) == 0) + if (strncmpic(mp->name, p, mp->namelen) == 0) { uschar *q = p + mp->namelen; + int size = 0; + int ptr = 0; + /* yes, grab the value and copy to its corresponding expansion variable */ - while(*q != ';') q++; - param_value_len = (q - (p + mp->namelen)); - param_value = (uschar *)malloc(param_value_len+1); - memset(param_value,0,param_value_len+1); - q = p + mp->namelen; - Ustrncpy(param_value, q, param_value_len); - param_value = rfc2047_decode(param_value, check_rfc2047_length, NULL, 32, ¶m_value_len, &q); - debug_printf("Found %s MIME parameter in %s header, value is '%s'\n", mp->name, mime_header_list[i].name, param_value); - *((uschar **)(mp->value)) = param_value; + while(*q && *q != ';') /* ; terminates */ + { + if (*q == '"') + { + q++; /* skip leading " */ + while(*q && *q != '"') /* which protects ; */ + param_value = string_cat(param_value, &size, &ptr, q++, 1); + if (*q) q++; /* skip trailing " */ + } + else + param_value = string_cat(param_value, &size, &ptr, q++, 1); + } + if (param_value) + { + param_value[ptr++] = '\0'; + param_value_len = ptr; + + param_value = rfc2047_decode(param_value, + check_rfc2047_length, NULL, 32, ¶m_value_len, &q); + debug_printf("Found %s MIME parameter in %s header, " + "value is '%s'\n", mp->name, mime_header_list[i].name, + param_value); + } + *mp->value = param_value; p += (mp->namelen + param_value_len + 1); goto NEXT_PARAM_SEARCH; }