Mercurial > dovecot > core-2.2
changeset 10313:037299bb2199 HEAD
rfc2231 parser: Fixed parsing "key*".
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Thu, 12 Nov 2009 12:42:31 -0500 |
parents | 3baf1cb9fdda |
children | 49f6fc5b60a8 |
files | src/lib-mail/rfc2231-parser.c src/lib-mail/test-rfc2231-parser.c |
diffstat | 2 files changed, 17 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-mail/rfc2231-parser.c Wed Nov 11 15:40:18 2009 -0500 +++ b/src/lib-mail/rfc2231-parser.c Thu Nov 12 12:42:31 2009 -0500 @@ -67,11 +67,14 @@ } p = strchr(key, '*'); if (p != NULL) { - p2 = p++; - rfc2231_param.idx = 0; - for (; *p >= '0' && *p <= '9'; p++) { - rfc2231_param.idx = - rfc2231_param.idx*10 + *p - '0'; + p2 = p; + if (p[1] != '\0') { + p++; + rfc2231_param.idx = 0; + for (; *p >= '0' && *p <= '9'; p++) { + rfc2231_param.idx = + rfc2231_param.idx*10 + *p - '0'; + } } if (*p != '*') rfc2231_param.extended = FALSE;
--- a/src/lib-mail/test-rfc2231-parser.c Wed Nov 11 15:40:18 2009 -0500 +++ b/src/lib-mail/test-rfc2231-parser.c Thu Nov 12 12:42:31 2009 -0500 @@ -8,6 +8,7 @@ static void test_rfc2231_parser(void) { const char *input = + "; key4*=us-ascii''foo" "; key*2=ba%" "; key2*0=a" "; key3*0*=us-ascii'en'xyz" @@ -22,26 +23,21 @@ "''ab%25", "key3*", "us-ascii'en'xyzplop%25", + "key4*", + "us-ascii''foo", NULL }; struct rfc822_parser_context parser; const char *const *result; unsigned int i; - bool success; + test_begin("rfc2231 parser"); rfc822_parser_init(&parser, (const void *)input, strlen(input), NULL); - if (rfc2231_parse(&parser, &result) < 0) - success = FALSE; - else { - success = TRUE; - for (i = 0; output[i] != NULL && result[i] != NULL; i++) { - if (strcmp(output[i], result[i]) != 0) - break; - } - if (output[i] != NULL || result[i] != NULL) - success = FALSE; - } - test_out("rfc2231_parse()", success); + test_assert(rfc2231_parse(&parser, &result) == 0); + for (i = 0; output[i] != NULL && result[i] != NULL; i++) + test_assert(strcmp(output[i], result[i]) == 0); + test_assert(output[i] == NULL && result[i] == NULL); + test_end(); } int main(void)