summaryrefslogtreecommitdiffstats
path: root/fluent-bit/tests/internal/fuzzers/config_fuzzer.c
diff options
context:
space:
mode:
Diffstat (limited to 'fluent-bit/tests/internal/fuzzers/config_fuzzer.c')
-rw-r--r--fluent-bit/tests/internal/fuzzers/config_fuzzer.c417
1 files changed, 0 insertions, 417 deletions
diff --git a/fluent-bit/tests/internal/fuzzers/config_fuzzer.c b/fluent-bit/tests/internal/fuzzers/config_fuzzer.c
deleted file mode 100644
index 5512dac29..000000000
--- a/fluent-bit/tests/internal/fuzzers/config_fuzzer.c
+++ /dev/null
@@ -1,417 +0,0 @@
-#include <stdint.h>
-#include <string.h>
-#include <stdlib.h>
-#include <fluent-bit/flb_parser.h>
-#include <fluent-bit/flb_slist.h>
-#include <fluent-bit/flb_kv.h>
-#include "flb_fuzz_header.h"
-
-/* A sample of configurations */
-char conf_file[] = "# Parser: no_year\n"
-"# ===============\n"
-"# the given format don't contain the Year, this is a common\n"
-"# case on old Syslog implementations.\n"
-"#\n"
-"[PARSER]\n"
-" Name no_year\n"
-" Format json\n"
-" Time_Key time\n"
-" Time_Format %b %d %H:%M:%S\n"
-" Time_Keep On\n"
-"\n"
-"# Parser: no_year_N\n"
-"# =================\n"
-"# Just for compatibility, check a string with no year but including Nanoseconds.\n"
-"#\n"
-"[PARSER]\n"
-" Name no_year_N\n"
-" Format json\n"
-" Time_Key time\n"
-" Time_Format %b %d %H:%M:%S.%L\n"
-" Time_Keep On\n"
-"\n"
-"# Parser: no_year_NC\n"
-"# =================\n"
-"# Just for compatibility, check a string with no year but including Nanoseconds with comma as fractional separator.\n"
-"#\n"
-"[PARSER]\n"
-" Name no_year_NC\n"
-" Format json\n"
-" Time_Key time\n"
-" Time_Format %b %d %H:%M:%S,%L\n"
-" Time_Keep On\n"
-"\n"
-"# Parser: no_year_TZ\n"
-"# =================\n"
-"# Time string with no year and including timezone\n"
-"#\n"
-"[PARSER]\n"
-" Name no_year_TZ\n"
-" Format json\n"
-" Time_Key time\n"
-" Time_Format %b %d %H:%M:%S %z\n"
-" Time_Keep On\n"
-"\n"
-"# Parser: no_year_N_TZ\n"
-"# ====================\n"
-"# Time string with no year, nanoseconds and timezone\n"
-"#\n"
-"[PARSER]\n"
-" Name no_year_N_TZ\n"
-" Format json\n"
-" Time_Key time\n"
-" Time_Format %b %d %H:%M:%S.%L %z\n"
-" Time_Keep On\n"
-"\n"
-"\n"
-"# Parser: no_year_NC_TZ\n"
-"# ====================\n"
-"# Time string with no year, nanoseconds and timezone with comma as fractional separator.\n"
-"#\n"
-"[PARSER]\n"
-" Name no_year_NC_TZ\n"
-" Format json\n"
-" Time_Key time\n"
-" Time_Format %b %d %H:%M:%S,%L %z\n"
-" Time_Keep On\n"
-"\n"
-"\n"
-"# Parser: default_UTC\n"
-"# ===================\n"
-"# Time string with timezone in UTC\n"
-"#\n"
-"[PARSER]\n"
-" Name default_UTC\n"
-" Format json\n"
-" Time_Key time\n"
-" Time_Format %m/%d/%Y %H:%M:%S\n"
-" Time_Keep On\n"
-"\n"
-"# Parser: default_UTC_Z\n"
-"# =====================\n"
-"# Time string with timezone in UTC and ending Z\n"
-"#\n"
-"[PARSER]\n"
-" Name default_UTC_Z\n"
-" Format json\n"
-" Time_Key time\n"
-" Time_Format %m/%d/%Y %H:%M:%SZ\n"
-" Time_Keep On\n"
-"\n"
-"# Parser: default_UTC_N_Z\n"
-"# =======================\n"
-"# Time string with timezone in UTC, nanoseconds and ending Z\n"
-"#\n"
-"[PARSER]\n"
-" Name default_UTC_N_Z\n"
-" Format json\n"
-" Time_Key time\n"
-" Time_Format %m/%d/%Y %H:%M:%S.%LZ\n"
-" Time_Keep On\n"
-"\n"
-"# Parser: default_UTC_NC_Z\n"
-"# =======================\n"
-"# Time string with timezone in UTC, nanoseconds with comma as fractional separator and ending Z\n"
-"#\n"
-"[PARSER]\n"
-" Name default_UTC_NC_Z\n"
-" Format json\n"
-" Time_Key time\n"
-" Time_Format %m/%d/%Y %H:%M:%S,%LZ\n"
-" Time_Keep On\n"
-"\n"
-"# Parser: generic_TZ\n"
-"# ==================\n"
-"# Generic date with timezone\n"
-"#\n"
-"[PARSER]\n"
-" Name generic_TZ\n"
-" Format json\n"
-" Time_Key time\n"
-" Time_Format %m/%d/%Y %H:%M:%S %z\n"
-" Time_Keep On\n"
-"\n"
-"# Parser: generic\n"
-"# ===============\n"
-"# Generic date\n"
-"#\n"
-"[PARSER]\n"
-" Name generic\n"
-" Format json\n"
-" Time_Key time\n"
-" Time_Format %m/%d/%Y %H:%M:%S\n"
-" Time_Keep On\n"
-"\n"
-"# Parser: generic_N\n"
-"# ===============\n"
-"# Generic date with nanoseconds\n"
-"#\n"
-"[PARSER]\n"
-" Name generic_N\n"
-" Format json\n"
-" Time_Key time\n"
-" Time_Format %m/%d/%Y %H:%M:%S.%L\n"
-" Time_Keep On\n"
-"\n"
-"# Parser: generic_NC\n"
-"# ===============\n"
-"# Generic date with nanoseconds with comma as fractional separator\n"
-"#\n"
-"[PARSER]\n"
-" Name generic_NC\n"
-" Format json\n"
-" Time_Key time\n"
-" Time_Format %m/%d/%Y %H:%M:%S,%L\n"
-" Time_Keep On\n"
-"\n"
-"# Parser: generic_N_TZ\n"
-"# ====================\n"
-"# Generic date with nanoseconds and timezone\n"
-"#\n"
-"[PARSER]\n"
-" Name generic_N_TZ\n"
-" Format json\n"
-" Time_Key time\n"
-" Time_Format %m/%d/%Y %H:%M:%S.%L %z\n"
-" Time_Keep On\n"
-"\n"
-"# Parser: generic_NC_TZ\n"
-"# ====================\n"
-"# Generic date with nanoseconds with comma as fractional separator and timezone\n"
-"#\n"
-"[PARSER]\n"
-" Name generic_NC_TZ\n"
-" Format json\n"
-" Time_Key time\n"
-" Time_Format %m/%d/%Y %H:%M:%S,%L %z\n"
-" Time_Keep On\n"
-"\n"
-"# Parser: apache_error\n"
-"# ====================\n"
-"# Apache error log time format\n"
-"#\n"
-"[PARSER]\n"
-" Name apache_error\n"
-" Format json\n"
-" Time_Key time\n"
-" Time_Format %a %b %d %H:%M:%S.%L %Y\n"
-" Time_Keep On\n"
-"# Parser: mysql_quoted_stuff\n"
-"# ====================\n"
-"# Apache error log time format\n"
-"#\n"
-"[PARSER]\n"
-" Name mysql_quoted_stuff\n"
-" Format regex\n"
-" Regex ^(?<time>.*?),(?<key001>.*)$\n"
-" Time_Key time\n"
-" Time_Format %Y-%M-%S %H:%M:%S\n"
-" Time_Keep On\n"
-" Decode_Field_As mysql_quoted key001\n"
-"# Parser: REGEX_generic_NC_TZ\n"
-"# ====================\n"
-"# Generic date with nanoseconds with comma as fractional separator and timezone\n"
-"#\n"
-"[PARSER]\n"
-" Name REGEX_generic_NC_TZ\n"
-" Format regex\n"
-" Regex ^(?<key001>[^ ]*) (?<key002>[^ ]*) (?<time>.+)$\n"
-" Time_Key time\n"
-" Time_Format %m/%d/%Y %H:%M:%S,%L %z\n"
-" Time_Keep On\n"
-"\n"
-"# Parser: REGEX_apache_error\n"
-"# ====================\n"
-"# Apache error log time format\n"
-"#\n"
-"[PARSER]\n"
-" Name REGEX_apache_error\n"
-" Format regex\n"
-" Regex ^(?<key001>[^ ]*) (?<key002>[^ ]*) (?<time>.+)$\n"
-" Time_Key time\n"
-" Time_Format %a %b %d %H:%M:%S.%L %Y\n"
-" Time_Keep On\n"
-"\n"
-"\n"
-"\n"
-"# Parser: REGEX_mysql_quoted_stuff\n"
-"# ====================\n"
-"# Apache error log time format\n"
-"#\n"
-"[PARSER]\n"
-" Name REGEX_mysql_quoted_stuff\n"
-" Format regex\n"
-" Regex ^(?<time>.*?),(?<key001>.*)$\n"
-" Time_Key time\n"
-" Time_Format %Y-%M-%S %H:%M:%S\n"
-" Time_Keep On\n"
-" Decode_Field_As mysql_quoted key001\n"
-"\n"
-"\n"
-"\n"
-"# Parser: REGEX2_mysql_quoted_stuff\n"
-"# ====================\n"
-"# Apache error log time format\n"
-"#\n"
-"[PARSER]\n"
-" Name REGEX2_mysql_quoted_stuff\n"
-" Format logfmt\n"
-" Regex ^(?<time>.*?),(?<key001>.*)$\n"
-" Time_Key time\n"
-" Time_Format %Y-%M-%S %H:%M:%S\n"
-" Time_Keep On\n"
-" Decode_Field_As mysql_quoted key001\n"
-" Types A1:integer A2:string A3:bool A4:float A5:hex\n"
-"\n"
-"\n"
-"\n"
-"# Parser: REGEX3_mysql_quoted_stuff\n"
-"# ====================\n"
-"# Apache error log time format\n"
-"#\n"
-"[PARSER]\n"
-" Name REGEX3_mysql_quoted_stuff\n"
-" Format json\n"
-" Regex ^(?<time>.*?),(?<key001>.*)$\n"
-" Time_Key time\n"
-" Time_Format %Y-%M-%S %H:%M:%S\n"
-" Time_Keep On\n"
-" Decode_Field_As escaped_utf8 key001\n"
-" Types A1:integer A2:string A3:bool A4:float A5:hex\n"
-"\n"
-"\n"
-"\n"
-"# Parser: REGEX33_mysql_quoted_stuff\n"
-"# ====================\n"
-"# Apache error log time format\n"
-"#\n"
-"[PARSER]\n"
-" Name REGEX33_mysql_quoted_stuff\n"
-" Format json\n"
-" Regex ^(?<time>.*?),(?<key001>.*)$\n"
-" Time_Key time\n"
-" Time_Format %Y-%M-%S %H:%M:%S\n"
-" Time_Keep On\n"
-" Decode_Field_As escaped key001\n"
-" Types A1:integer A2:string A3:bool A4:float A5:hex\n"
-"\n"
-"\n"
-"\n"
-"# Parser: REGEX4_mysql_quoted_stuff\n"
-"# ====================\n"
-"# Apache error log time format\n"
-"#\n"
-"[PARSER]\n"
-" Name REGEX4_mysql_quoted_stuff\n"
-" Format json\n"
-" Regex ^(?<time>.*?),(?<key001>.*)$\n"
-" Time_Key time\n"
-" Time_Format %Y-%M-%S %H:%M:%S\n"
-" Time_Keep On\n"
-" Decode_Field_As json key001\n"
-" Types A1:integer A2:string A3:bool A4:float A5:hex\n"
-"[MULTILINE_PARSER]\n"
-" name exception_test\n"
-" type regex\n"
-" flush_timeout 1000\n"
-" rule \"start_state\" \"/(Dec \\d+ \\d+\\:\\d+\\:\\d+)(.*)/\" \"cont\"\n"
-" rule \"cont\" \"/^\\s+at.*/\" \"cont\"\n";
-
-
-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", getpid());
- FILE *fp = fopen(filename, "wb");
- if (!fp) {
- return 0;
- }
- fwrite(conf_file, strlen(conf_file), 1, fp);
- fclose(fp);
-
-
- /* Now parse random data based on the config files */
- struct flb_config *config = NULL;
- config = flb_config_init();
- int ret = flb_parser_conf_file(filename, config);
- if (ret == 0) {
- struct mk_list *head = NULL;
- mk_list_foreach(head, &config->parsers) {
- size_t out_size;
- char *out_buf = NULL;
- struct flb_parser *parser = NULL;
- struct flb_time out_time;
- parser = mk_list_entry(head, struct flb_parser, _head);
- flb_parser_do(parser, (const char*)data, size, (void **)&out_buf,
- &out_size, &out_time);
- if (out_buf != NULL) {
- free(out_buf);
- }
- }
- }
- flb_parser_exit(config);
- flb_config_exit(config);
-
- if (size > 100) {
- /* Now let's do a second run where we also call flb_config_set_property */
- config = flb_config_init();
- ret = flb_parser_conf_file(filename, config);
- char *key_1 = get_null_terminated(15, &data, &size);
- char *val_1 = get_null_terminated(15, &data, &size);
- char *key_2 = get_null_terminated(15, &data, &size);
- char *val_2 = get_null_terminated(15, &data, &size);
- char *progname = get_null_terminated(15, &data, &size);
-
- flb_config_set_property(config, key_1, val_1);
- flb_config_set_property(config, key_2, val_2);
- flb_config_set_program_name(config, progname);
- set_log_level_from_env(config);
-
- struct mk_list prop;
- flb_kv_init(&prop);
- flb_kv_item_create(&prop, key_1, val_1);
- flb_config_prop_get(progname, &prop);
- flb_slist_entry_get(&prop, (int)data[0]);
- flb_slist_dump(&prop);
-
- if (ret == 0) {
- struct mk_list *head = NULL;
- mk_list_foreach(head, &config->parsers) {
- size_t out_size;
- char *out_buf = NULL;
- struct flb_parser *parser = NULL;
- struct flb_time out_time;
-
- parser = mk_list_entry(head, struct flb_parser, _head);
- flb_parser_do(parser, (const char*)data, size, (void **)&out_buf,
- &out_size, &out_time);
- if (out_buf != NULL) {
- free(out_buf);
- }
- }
- }
- flb_parser_exit(config);
- flb_config_exit(config);
- flb_free(key_1);
- flb_free(val_1);
- flb_free(key_2);
- flb_free(val_2);
- flb_free(progname);
- flb_kv_release(&prop);
- }
-
- /* clean up the file */
- unlink(filename);
-
- return 0;
-}