Skip to content

Commit

Permalink
lib-mail: Change rfc822_parser_context.nul_replacement_char to string
Browse files Browse the repository at this point in the history
  • Loading branch information
sirainen committed Aug 30, 2018
1 parent a86d32d commit 0771805
Show file tree
Hide file tree
Showing 5 changed files with 16 additions and 16 deletions.
2 changes: 1 addition & 1 deletion src/lib-mail/message-address.c
Expand Up @@ -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;
Expand Down
8 changes: 4 additions & 4 deletions src/lib-mail/rfc2231-parser.c
Expand Up @@ -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*<n>[*]=value pairs,
which we want to merge to a key[*]=value pair. Save them to a
Expand Down Expand Up @@ -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 */
Expand Down
14 changes: 7 additions & 7 deletions src/lib-mail/rfc822-parser.c
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
6 changes: 3 additions & 3 deletions src/lib-mail/rfc822-parser.h
Expand Up @@ -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) \
Expand Down
2 changes: 1 addition & 1 deletion src/lib-mail/test-rfc822-parser.c
Expand Up @@ -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);
Expand Down

0 comments on commit 0771805

Please sign in to comment.