From: Aki Tuomi Date: Fri, 11 Sep 2020 12:02:57 +0000 (+0300) Subject: lib-mail: Add fuzz-message-parser X-Git-Tag: 2.3.14.rc1~177 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ec11aedaefd6dd6fde7a51ec54a37396013fc742;p=thirdparty%2Fdovecot%2Fcore.git lib-mail: Add fuzz-message-parser Fuzzer for message parser --- diff --git a/src/lib-mail/Makefile.am b/src/lib-mail/Makefile.am index f260694f18..67bb1cc15a 100644 --- a/src/lib-mail/Makefile.am +++ b/src/lib-mail/Makefile.am @@ -115,7 +115,22 @@ test_programs = \ test-rfc2231-parser \ test-rfc822-parser -noinst_PROGRAMS = $(test_programs) +fuzz_programs = + +if USE_FUZZER +fuzz_programs += fuzz-message-parser + +nodist_EXTRA_fuzz_message_parser_SOURCES = force-cxx-linking.cxx + +fuzz_message_parser_CPPFLAGS = $(FUZZER_CPPFLAGS) +fuzz_message_parser_LDFLAGS = $(FUZZER_LDFLAGS) +fuzz_message_parser_SOURCES = fuzz-message-parser.c +fuzz_message_parser_LDADD = $(test_libs) +fuzz_message_parser_DEPENDENCIES = $(test_deps) + +endif + +noinst_PROGRAMS = $(fuzz_programs) $(test_programs) test_libs = \ $(noinst_LTLIBRARIES) \ diff --git a/src/lib-mail/fuzz-message-parser.c b/src/lib-mail/fuzz-message-parser.c new file mode 100644 index 0000000000..1cb4bdca02 --- /dev/null +++ b/src/lib-mail/fuzz-message-parser.c @@ -0,0 +1,28 @@ +/* Copyright (c) 2020 Dovecot authors, see the included COPYING file */ + +#include "lib.h" +#include "istream.h" +#include "test-common.h" +#include "test-common.h" +#include "fuzzer.h" +#include "message-parser.h" + +FUZZ_BEGIN_DATA(const unsigned char *data, size_t size) +{ + struct istream *input = test_istream_create_data(data, size); + const struct message_parser_settings set = { + .hdr_flags = 0, + .flags = MESSAGE_PARSER_FLAG_INCLUDE_MULTIPART_BLOCKS, + .max_nested_mime_parts = 0, + .max_total_mime_parts = 0, + }; + struct message_parser_ctx *ctx = + message_parser_init(pool_datastack_create(), input, &set); + struct message_block block ATTR_UNUSED; + i_zero(&block); + while(message_parser_parse_next_block(ctx, &block) > -1); + struct message_part *part ATTR_UNUSED; + message_parser_deinit(&ctx, &part); + i_stream_unref(&input); +} +FUZZ_END