diff options
author | Jakub Zawadzki <darkjames-ws@darkjames.pl> | 2017-04-16 17:48:49 +0200 |
---|---|---|
committer | Jakub Zawadzki <darkjames-ws@darkjames.pl> | 2017-04-16 16:55:21 +0000 |
commit | 4fa9c5f1f34885181339c7e2fa6f97a57569b413 (patch) | |
tree | 463f8890c537d111620f9c6815eb4aa5ed2054f0 /tools | |
parent | 6e708bdab91e53d6caeb51ed5c124d05a2f1954a (diff) | |
download | wireshark-4fa9c5f1f34885181339c7e2fa6f97a57569b413.tar.gz |
oss-fuzzshark: search for dissector in given table.
Change-Id: Ia02b0e6a92213599307e5b382e9fd7ba6c9833a3
Reviewed-on: https://code.wireshark.org/review/21145
Reviewed-by: Jakub Zawadzki <darkjames-ws@darkjames.pl>
Petri-Dish: Jakub Zawadzki <darkjames-ws@darkjames.pl>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/oss-fuzzshark.c | 37 |
1 files changed, 32 insertions, 5 deletions
diff --git a/tools/oss-fuzzshark.c b/tools/oss-fuzzshark.c index 66141035dd..11adf5681e 100644 --- a/tools/oss-fuzzshark.c +++ b/tools/oss-fuzzshark.c @@ -139,7 +139,9 @@ fuzz_init(int argc _U_, char **argv) e_prefs *prefs_p; int ret = EXIT_SUCCESS; - const char *dis_name; +#if defined(FUZZ_DISSECTOR_TARGET) + dissector_handle_t fuzz_handle = NULL; +#endif cmdarg_err_init(failure_warning_message, failure_message_cont); @@ -223,8 +225,33 @@ fuzz_init(int argc _U_, char **argv) /* Build the column format array */ build_column_format_array(&fuzz_cinfo, prefs_p->num_cols, TRUE); -#ifdef FUZZ_DISSECTOR_TARGET - register_postdissector(find_dissector(FUZZ_DISSECTOR_TARGET)); +#if defined(FUZZ_DISSECTOR_TABLE) && defined(FUZZ_DISSECTOR_TARGET) +# define FUZZ_EPAN 1 + fprintf(stderr, "oss-fuzz configured for dissector: %s in table: %s\n", FUZZ_DISSECTOR_TARGET, FUZZ_DISSECTOR_TABLE); + + /* search for handle, cannot use dissector_table_get_dissector_handle() cause it's using short-name, and I already used filter name in samples ;/ */ + { + GSList *handle_list = dissector_table_get_dissector_handles(find_dissector_table(FUZZ_DISSECTOR_TABLE)); + while (handle_list) + { + dissector_handle_t handle = (dissector_handle_t) handle_list->data; + const char *handle_filter_name = proto_get_protocol_filter_name(dissector_handle_get_protocol_index(handle)); + + if (!strcmp(handle_filter_name, FUZZ_DISSECTOR_TARGET)) + fuzz_handle = handle; + handle_list = handle_list->next; + } + } + +#elif defined(FUZZ_DISSECTOR_TARGET) +# define FUZZ_EPAN 2 + fprintf(stderr, "oss-fuzz configured for dissector: %s\n", FUZZ_DISSECTOR_TARGET); + fuzz_handle = find_dissector(FUZZ_DISSECTOR_TARGET); +#endif + +#ifdef FUZZ_EPAN + g_assert(fuzz_handle != NULL); + register_postdissector(fuzz_handle); #endif fuzz_epan = fuzzshark_epan_new(); @@ -240,7 +267,7 @@ clean_exit: return ret; } -#ifdef FUZZ_DISSECTOR_TARGET +#ifdef FUZZ_EPAN int LLVMFuzzerTestOneInput(guint8 *buf, size_t real_len) { @@ -272,7 +299,7 @@ LLVMFuzzerTestOneInput(guint8 *buf, size_t real_len) } #else -# error "Missing fuzz target -DFUZZ_DISSECTOR_TARGET=\"dissector\"" +# error "Missing fuzz target." #endif int |