From 95d3df1184bc199e8e4ff22bc539c2dbb954f9be Mon Sep 17 00:00:00 2001 From: DavidKorczynski Date: Sat, 23 Sep 2023 19:06:45 +0100 Subject: [PATCH] tests: internal: fuzzers: add fstore fuzzer (#6465) Signed-off-by: David Korczynski --- tests/internal/fuzzers/CMakeLists.txt | 1 + tests/internal/fuzzers/fstore_fuzzer.c | 69 ++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 tests/internal/fuzzers/fstore_fuzzer.c diff --git a/tests/internal/fuzzers/CMakeLists.txt b/tests/internal/fuzzers/CMakeLists.txt index b3c4ce9bb42..e76be548a20 100644 --- a/tests/internal/fuzzers/CMakeLists.txt +++ b/tests/internal/fuzzers/CMakeLists.txt @@ -12,6 +12,7 @@ set(UNIT_TESTS_FILES flb_json_fuzzer.c flb_mp_fuzzer.c filter_stdout_fuzzer.c + fstore_fuzzer.c parser_fuzzer.c parse_json_fuzzer.c parse_logfmt_fuzzer.c diff --git a/tests/internal/fuzzers/fstore_fuzzer.c b/tests/internal/fuzzers/fstore_fuzzer.c new file mode 100644 index 00000000000..dd7a6cf8b96 --- /dev/null +++ b/tests/internal/fuzzers/fstore_fuzzer.c @@ -0,0 +1,69 @@ +/* Fluent Bit + * ========== + * Copyright (C) 2019-2022 The Fluent Bit Authors + * Copyright (C) 2015-2018 Treasure Data Inc. + * + * 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 +#include + +#include +#include + +#include +#include + + +#define FSF_STORE_PATH "/tmp/flb-fstore" + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + int ret; + void *out_buf; + size_t out_size; + struct stat st_data; + struct flb_fstore *fs; + struct flb_fstore_stream *st; + struct flb_fstore_file *fsf; + + cio_utils_recursive_delete(FSF_STORE_PATH); + fs = flb_fstore_create(FSF_STORE_PATH, FLB_FSTORE_FS); + st = flb_fstore_stream_create(fs, "abc"); + if (st != NULL) { + fsf = flb_fstore_file_create(fs, st, "example.txt", size); + + if (fsf != NULL) { + ret = flb_fstore_file_append(fsf, data, size); + if (ret == 0) { + ret = flb_fstore_file_content_copy(fs, fsf, &out_buf, &out_size); + if (ret == 0) { + assert(memcmp(out_buf, data, size) == 0); + } + flb_free(out_buf); + } + } + } + + flb_fstore_dump(fs); + flb_fstore_destroy(fs); + return 0; +}