diff --git a/src/lib-mail/message-header-parser.c b/src/lib-mail/message-header-parser.c index 3db3e4ab97..97d4205241 100644 --- a/src/lib-mail/message-header-parser.c +++ b/src/lib-mail/message-header-parser.c @@ -3,6 +3,7 @@ #include "lib.h" #include "buffer.h" #include "istream.h" +#include "istream-nonuls.h" #include "str.h" #include "message-size.h" #include "message-header-parser.h" @@ -28,12 +29,16 @@ message_parse_header_init(struct istream *input, struct message_size *hdr_size, struct message_header_parser_ctx *ctx; ctx = i_new(struct message_header_parser_ctx, 1); - ctx->input = input; + if ((flags & MESSAGE_HEADER_REPLACE_NULS_WITH_0x80) != 0) + ctx->input = i_stream_create_nonuls(input, 0x80); + else { + ctx->input = input; + i_stream_ref(input); + } ctx->hdr_size = hdr_size; ctx->name = str_new(default_pool, 128); ctx->flags = flags; ctx->value_buf = buffer_create_dynamic(default_pool, 4096); - i_stream_ref(input); if (hdr_size != NULL) i_zero(hdr_size); diff --git a/src/lib-mail/message-header-parser.h b/src/lib-mail/message-header-parser.h index d6863524aa..38594bd18c 100644 --- a/src/lib-mail/message-header-parser.h +++ b/src/lib-mail/message-header-parser.h @@ -13,7 +13,9 @@ enum message_header_parser_flags { /* Don't add CRs to full_value even if input had them */ MESSAGE_HEADER_PARSER_FLAG_DROP_CR = 0x02, /* Convert [CR+]LF+LWSP to a space character in full_value */ - MESSAGE_HEADER_PARSER_FLAG_CLEAN_ONELINE = 0x04 + MESSAGE_HEADER_PARSER_FLAG_CLEAN_ONELINE = 0x04, + /* Replace 0x0 symbols with 0x80 */ + MESSAGE_HEADER_REPLACE_NULS_WITH_0x80 = 0x08, }; struct message_header_line {