From a2105c2c2549f3a2a7e3fc61a9da72544dba2afa Mon Sep 17 00:00:00 2001 From: David Korczynski Date: Fri, 11 Aug 2023 04:08:28 -0700 Subject: [PATCH] tests: internal: fuzzers: add mp fuzzer Signed-off-by: David Korczynski --- tests/internal/fuzzers/CMakeLists.txt | 1 + tests/internal/fuzzers/flb_mp_fuzzer.c | 55 ++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 tests/internal/fuzzers/flb_mp_fuzzer.c diff --git a/tests/internal/fuzzers/CMakeLists.txt b/tests/internal/fuzzers/CMakeLists.txt index 4f2600b1336..b3c4ce9bb42 100644 --- a/tests/internal/fuzzers/CMakeLists.txt +++ b/tests/internal/fuzzers/CMakeLists.txt @@ -10,6 +10,7 @@ set(UNIT_TESTS_FILES input_fuzzer.c signv4_fuzzer.c flb_json_fuzzer.c + flb_mp_fuzzer.c filter_stdout_fuzzer.c parser_fuzzer.c parse_json_fuzzer.c diff --git a/tests/internal/fuzzers/flb_mp_fuzzer.c b/tests/internal/fuzzers/flb_mp_fuzzer.c new file mode 100644 index 00000000000..b33c90407f5 --- /dev/null +++ b/tests/internal/fuzzers/flb_mp_fuzzer.c @@ -0,0 +1,55 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ + +/* Fluent Bit + * ========== + * Copyright (C) 2015-2023 The Fluent Bit Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include +#include +#include +#include + +#include "flb_fuzz_header.h" + +int LLVMFuzzerTestOneInput(unsigned char *data, size_t size) +{ + /* Set flb_malloc_mod to be fuzzer-data dependent */ + if (size < 5) { + return 0; + } + flb_malloc_p = 0; + flb_malloc_mod = *(int*)data; + data += 4; + size -= 4; + + /* Avoid division by zero for modulo operations */ + if (flb_malloc_mod == 0) { + flb_malloc_mod = 1; + } + + unsigned char decider = *data; + data++; + size--; + + int out_records; + size_t processed_bytes; + if (decider % 2 == 0) { + flb_mp_validate_log_chunk(data, size, &out_records, &processed_bytes); + } + else if (decider % 2 == 1) { + flb_mp_validate_metric_chunk(data, size, &out_records, &processed_bytes); + } + return 0; +}