]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-mail: test-message-parser - Add another test for boundary matching
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 23 Apr 2020 08:14:04 +0000 (11:14 +0300)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 27 May 2020 05:28:17 +0000 (08:28 +0300)
src/lib-mail/test-message-parser.c

index 4f4d68408305dc2c5fc707f6d095c545b35e3666..529a36d59c6e6f8ecd8a5fc8cf160f03247433a4 100644 (file)
@@ -613,6 +613,76 @@ static const char input_msg[] =
        test_end();
 }
 
+static void test_message_parser_continuing_mime_boundary_reverse(void)
+{
+static const char input_msg[] =
+"Content-Type: multipart/mixed; boundary=\"ab\"\n"
+"\n"
+"--ab\n"
+"Content-Type: multipart/mixed; boundary=\"a\"\n"
+"\n"
+"--a\n"
+"Content-Type: text/plain\n"
+"\n"
+"body\n"
+"--ab\n"
+"Content-Type: text/html\n"
+"\n"
+"body2\n";
+       struct message_parser_ctx *parser;
+       struct istream *input;
+       struct message_part *parts;
+       struct message_block block;
+       pool_t pool;
+       int ret;
+
+       test_begin("message parser continuing mime boundary reverse");
+       pool = pool_alloconly_create("message parser", 10240);
+       input = test_istream_create(input_msg);
+
+       parser = message_parser_init(pool, input, 0, 0);
+       while ((ret = message_parser_parse_next_block(parser, &block)) > 0) ;
+       test_assert(ret < 0);
+       message_parser_deinit(&parser, &parts);
+
+       test_assert(parts->flags == (MESSAGE_PART_FLAG_MULTIPART | MESSAGE_PART_FLAG_IS_MIME));
+       test_assert(parts->header_size.lines == 2);
+       test_assert(parts->header_size.physical_size == 46);
+       test_assert(parts->header_size.virtual_size == 46+2);
+       test_assert(parts->body_size.lines == 11);
+       test_assert(parts->body_size.physical_size == 121);
+       test_assert(parts->body_size.virtual_size == 121+11);
+       test_assert(parts->children->flags == (MESSAGE_PART_FLAG_MULTIPART | MESSAGE_PART_FLAG_IS_MIME));
+       test_assert(parts->children->physical_pos == 51);
+       test_assert(parts->children->header_size.lines == 2);
+       test_assert(parts->children->header_size.physical_size == 45);
+       test_assert(parts->children->header_size.virtual_size == 45+2);
+       test_assert(parts->children->body_size.lines == 3);
+       test_assert(parts->children->body_size.physical_size == 34);
+       test_assert(parts->children->body_size.virtual_size == 34+3);
+       test_assert(parts->children->children->flags == (MESSAGE_PART_FLAG_TEXT | MESSAGE_PART_FLAG_IS_MIME));
+       test_assert(parts->children->children->physical_pos == 100);
+       test_assert(parts->children->children->header_size.lines == 2);
+       test_assert(parts->children->children->header_size.physical_size == 26);
+       test_assert(parts->children->children->header_size.virtual_size == 26+2);
+       test_assert(parts->children->children->body_size.lines == 0);
+       test_assert(parts->children->children->body_size.physical_size == 4);
+       test_assert(parts->children->children->body_size.virtual_size == 4);
+       test_assert(parts->children->next->flags == (MESSAGE_PART_FLAG_TEXT | MESSAGE_PART_FLAG_IS_MIME));
+       test_assert(parts->children->next->physical_pos == 136);
+       test_assert(parts->children->next->header_size.lines == 2);
+       test_assert(parts->children->next->header_size.physical_size == 25);
+       test_assert(parts->children->next->header_size.virtual_size == 25+2);
+       test_assert(parts->children->next->body_size.lines == 1);
+       test_assert(parts->children->next->body_size.physical_size == 6);
+       test_assert(parts->children->next->body_size.virtual_size == 6+1);
+
+       test_parsed_parts(input, parts);
+       i_stream_unref(&input);
+       pool_unref(&pool);
+       test_end();
+}
+
 static void test_message_parser_no_eoh(void)
 {
        static const char input_msg[] = "a:b\n";
@@ -653,6 +723,7 @@ int main(void)
                test_message_parser_garbage_suffix_mime_boundary,
                test_message_parser_continuing_mime_boundary,
                test_message_parser_continuing_truncated_mime_boundary,
+               test_message_parser_continuing_mime_boundary_reverse,
                test_message_parser_no_eoh,
                NULL
        };