From 03afd1f185b4814a35ed5f5e81f3d4a687f114dc Mon Sep 17 00:00:00 2001 From: David Korczynski Date: Wed, 9 Aug 2023 14:48:22 -0700 Subject: [PATCH] tests: internal: fuzzers: add config yaml fuzzer Signed-off-by: David Korczynski --- CMakeLists.txt | 2 - tests/internal/fuzzers/CMakeLists.txt | 1 + tests/internal/fuzzers/config_yaml_fuzzer.c | 65 +++++++++++++++++++++ 3 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 tests/internal/fuzzers/config_yaml_fuzzer.c diff --git a/CMakeLists.txt b/CMakeLists.txt index df6b283cf87..39e93e9c670 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -369,8 +369,6 @@ endif() if (FLB_TESTS_OSSFUZZ) FLB_DEFINITION(FLB_HAVE_TESTS_OSSFUZZ) - # Disable for fuzz testing - set(FLB_CONFIG_YAML Off) endif() if (FLB_WASM) diff --git a/tests/internal/fuzzers/CMakeLists.txt b/tests/internal/fuzzers/CMakeLists.txt index e61ff698277..4f2600b1336 100644 --- a/tests/internal/fuzzers/CMakeLists.txt +++ b/tests/internal/fuzzers/CMakeLists.txt @@ -24,6 +24,7 @@ set(UNIT_TESTS_FILES utils_fuzzer.c config_map_fuzzer.c record_ac_fuzzer.c + config_yaml_fuzzer.c ) # Prepare list of unit tests diff --git a/tests/internal/fuzzers/config_yaml_fuzzer.c b/tests/internal/fuzzers/config_yaml_fuzzer.c new file mode 100644 index 00000000000..99e17ba64b5 --- /dev/null +++ b/tests/internal/fuzzers/config_yaml_fuzzer.c @@ -0,0 +1,65 @@ +/* -*- 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 +#include + +#include "flb_fuzz_header.h" + + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + /* Set fuzzer-malloc chance of failure */ + flb_malloc_p = 0; + flb_malloc_mod = 25000; + + /* Limit the size of the config files to 32KB. */ + if (size > 32768) { + return 0; + } + + /* Write the config file to a location we know OSS-Fuzz has */ + char filename[256]; + sprintf(filename, "/tmp/libfuzzer.%d.yaml", getpid()); + FILE *fp = fopen(filename, "wb"); + if (!fp) { + return 0; + } + fwrite(data, size, 1, fp); + fclose(fp); + + + struct flb_cf *cf; + struct flb_cf_section *s; + + cf = flb_cf_yaml_create(NULL, filename, NULL, 0); + if (cf != NULL) { + flb_cf_destroy(cf); + } + + /* clean up the file */ + unlink(filename); + + return 0; +}