summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorJakub Zawadzki <darkjames-ws@darkjames.pl>2017-04-16 17:48:49 +0200
committerJakub Zawadzki <darkjames-ws@darkjames.pl>2017-04-16 16:55:21 +0000
commit4fa9c5f1f34885181339c7e2fa6f97a57569b413 (patch)
tree463f8890c537d111620f9c6815eb4aa5ed2054f0 /tools
parent6e708bdab91e53d6caeb51ed5c124d05a2f1954a (diff)
downloadwireshark-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.c37
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