From f6998c4f8b7650d0f4fd922cf39fc65be657d78c Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Tue, 25 Feb 2020 14:31:43 +0200 Subject: [PATCH] lib-mail: message-snippet - Fix size limits for quoted snippets If the input only had quoted text, the snippet size wasn't limited to max_snippet_chars as long as there was any whitespace in the quoted text. --- src/lib-mail/message-snippet.c | 9 +++++---- src/lib-mail/test-message-snippet.c | 5 +++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/lib-mail/message-snippet.c b/src/lib-mail/message-snippet.c index a3cc319d33..e108b5821b 100644 --- a/src/lib-mail/message-snippet.c +++ b/src/lib-mail/message-snippet.c @@ -60,15 +60,16 @@ static void snippet_add_content(struct snippet_context *ctx, ctx->state = SNIPPET_STATE_NEWLINE; return; } + if (target->chars_left == 0) + return; + target->chars_left--; if (ctx->add_whitespace) { str_append_c(target->snippet, ' '); ctx->add_whitespace = FALSE; - if (target->chars_left-- == 0) + if (target->chars_left == 0) return; + target->chars_left--; } - if (target->chars_left == 0) - return; - target->chars_left--; *count_r = uni_utf8_char_bytes(data[0]); i_assert(*count_r <= size); str_append_data(target->snippet, data, *count_r); diff --git a/src/lib-mail/test-message-snippet.c b/src/lib-mail/test-message-snippet.c index 735acbde47..387a107341 100644 --- a/src/lib-mail/test-message-snippet.c +++ b/src/lib-mail/test-message-snippet.c @@ -81,6 +81,11 @@ static const struct { "top\nposter\n>quote1\n>quote2\n", 100, "top poster" }, + { "Content-Type: text/plain\n" + "\n" + ">quoted long text", + 6, + ">quoted" }, { "Content-Type: text/plain; charset=utf-8\n" "\n" "Invalid utf8 \x80\xff\n", -- 2.47.3