From: Timo Sirainen Date: Wed, 25 Apr 2018 11:11:43 +0000 (+0300) Subject: lib-mail: Change rfc822_parser_context.nul_replacement_char to string X-Git-Tag: 2.3.4~243 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0771805e6ee25088ece245e14ed89744fc7a3bf5;p=thirdparty%2Fdovecot%2Fcore.git lib-mail: Change rfc822_parser_context.nul_replacement_char to string --- diff --git a/src/lib-mail/message-address.c b/src/lib-mail/message-address.c index f217b87a85..0a437e4a30 100644 --- a/src/lib-mail/message-address.c +++ b/src/lib-mail/message-address.c @@ -426,7 +426,7 @@ message_address_parse_real(pool_t pool, const unsigned char *data, size_t size, i_zero(&ctx); rfc822_parser_init(&ctx.parser, data, size, t_str_new(128)); - ctx.parser.nul_replacement_char = RFC822_NUL_REPLACEMENT_CHAR; + ctx.parser.nul_replacement_str = RFC822_NUL_REPLACEMENT_STR; ctx.pool = pool; ctx.str = t_str_new(128); ctx.fill_missing = fill_missing; diff --git a/src/lib-mail/rfc2231-parser.c b/src/lib-mail/rfc2231-parser.c index 9b6cd4d360..6aa25470a3 100644 --- a/src/lib-mail/rfc2231-parser.c +++ b/src/lib-mail/rfc2231-parser.c @@ -47,13 +47,13 @@ int rfc2231_parse(struct rfc822_parser_context *ctx, string_t *str; unsigned int i, j, count, next, next_idx; bool ok, have_extended, broken = FALSE; - char prev_replacement_char; + const char *prev_replacement_str; int ret; /* Temporarily replace the nul_replacement_char while we're parsing the content-params. It'll be restored before we return. */ - prev_replacement_char = ctx->nul_replacement_char; - ctx->nul_replacement_char = RFC822_NUL_REPLACEMENT_CHAR; + prev_replacement_str = ctx->nul_replacement_str; + ctx->nul_replacement_str = RFC822_NUL_REPLACEMENT_STR; /* Get a list of all parameters. RFC 2231 uses key*[*]=value pairs, which we want to merge to a key[*]=value pair. Save them to a @@ -103,7 +103,7 @@ int rfc2231_parse(struct rfc822_parser_context *ctx, array_append(&result, &value, 1); } } - ctx->nul_replacement_char = prev_replacement_char; + ctx->nul_replacement_str = prev_replacement_str; if (array_count(&rfc2231_params_arr) == 0) { /* No RFC 2231 parameters */ diff --git a/src/lib-mail/rfc822-parser.c b/src/lib-mail/rfc822-parser.c index ed24a60663..57a8171a93 100644 --- a/src/lib-mail/rfc822-parser.c +++ b/src/lib-mail/rfc822-parser.c @@ -77,11 +77,11 @@ int rfc822_skip_comment(struct rfc822_parser_context *ctx) switch (*ctx->data) { case '\0': if (ctx->last_comment != NULL && - ctx->nul_replacement_char != '\0') { + ctx->nul_replacement_str != NULL) { str_append_data(ctx->last_comment, start, ctx->data - start); - str_append_c(ctx->last_comment, - ctx->nul_replacement_char); + str_append(ctx->last_comment, + ctx->nul_replacement_str); start = ctx->data + 1; } break; @@ -247,9 +247,9 @@ int rfc822_parse_quoted_string(struct rfc822_parser_context *ctx, string_t *str) for (start = ctx->data; ctx->data < ctx->end; ctx->data++) { switch (*ctx->data) { case '\0': - if (ctx->nul_replacement_char != '\0') { + if (ctx->nul_replacement_str != NULL) { str_append_data(str, start, ctx->data - start); - str_append_c(str, ctx->nul_replacement_char); + str_append(str, ctx->nul_replacement_str); start = ctx->data + 1; } break; @@ -364,9 +364,9 @@ rfc822_parse_domain_literal(struct rfc822_parser_context *ctx, string_t *str) for (start = ctx->data++; ctx->data < ctx->end; ctx->data++) { switch (*ctx->data) { case '\0': - if (ctx->nul_replacement_char != '\0') { + if (ctx->nul_replacement_str != NULL) { str_append_data(str, start, ctx->data - start); - str_append_c(str, ctx->nul_replacement_char); + str_append(str, ctx->nul_replacement_str); start = ctx->data + 1; } break; diff --git a/src/lib-mail/rfc822-parser.h b/src/lib-mail/rfc822-parser.h index f36ec103f0..fa41a6e21b 100644 --- a/src/lib-mail/rfc822-parser.h +++ b/src/lib-mail/rfc822-parser.h @@ -2,14 +2,14 @@ #define RFC822_PARSER_H /* This can be used as a common NUL replacement character */ -#define RFC822_NUL_REPLACEMENT_CHAR 0x80 +#define RFC822_NUL_REPLACEMENT_STR "\x80" struct rfc822_parser_context { const unsigned char *data, *end; string_t *last_comment; - /* Replace NULs with this character */ - char nul_replacement_char; + /* Replace NUL characters with this string */ + const char *nul_replacement_str; }; #define IS_ATEXT(c) \ diff --git a/src/lib-mail/test-rfc822-parser.c b/src/lib-mail/test-rfc822-parser.c index 7f0e1b1c5f..6ac4fad5eb 100644 --- a/src/lib-mail/test-rfc822-parser.c +++ b/src/lib-mail/test-rfc822-parser.c @@ -68,7 +68,7 @@ static void test_rfc822_parse_comment_nuls(void) str_truncate(str, 0); rfc822_parser_init(&parser, input, sizeof(input)-1, str); - parser.nul_replacement_char = '!'; + parser.nul_replacement_str = "!"; test_assert(rfc822_skip_comment(&parser) == 0); test_assert(strcmp(str_c(str), output) == 0); rfc822_parser_deinit(&parser);