summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksandermj@chromium.org>2022-10-28 13:50:59 +0000
committerAleksander Morgado <aleksandermj@chromium.org>2022-11-22 11:00:13 +0000
commit07389e68b802dbe3de7284afd4642a747712759b (patch)
tree18ff17c3818203e36a6354bd908b6b3dc4a63ae2
parent4c4973bbb2f47196dfed6a9f3f99c0b7a6cdfc76 (diff)
downloadlibmbim-07389e68b802dbe3de7284afd4642a747712759b.tar.gz
libmbim-glib,test: add fuzzer test for mbim_message_validate()
-rw-r--r--meson.build3
-rw-r--r--meson_options.txt2
-rw-r--r--src/libmbim-glib/test/meson.build12
-rw-r--r--src/libmbim-glib/test/test-message-fuzzer.c27
4 files changed, 44 insertions, 0 deletions
diff --git a/meson.build b/meson.build
index f67cd69..5cb0527 100644
--- a/meson.build
+++ b/meson.build
@@ -192,6 +192,8 @@ if enable_man
subdir('docs/man')
endif
+enable_fuzzer = get_option('fuzzer')
+
configure_file(
output: 'config.h',
configuration: config_h,
@@ -204,6 +206,7 @@ summary({
'bash completion': enable_bash_completion,
'gobject introspection': enable_gir,
'man pages': enable_man,
+ 'fuzzer': enable_fuzzer,
}, section: 'Build')
summary({
diff --git a/meson_options.txt b/meson_options.txt
index e768e39..6ed3634 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -10,3 +10,5 @@ option('gtk_doc', type: 'boolean', value: false, description: 'use gtk-doc to bu
option('man', type: 'boolean', value: true, description: 'build man pages using help2man')
option('bash_completion', type: 'boolean', value: true, description: 'install bash completion files')
+
+option('fuzzer', type: 'boolean', value: false, description: 'build fuzzer tests')
diff --git a/src/libmbim-glib/test/meson.build b/src/libmbim-glib/test/meson.build
index a501cfe..196be64 100644
--- a/src/libmbim-glib/test/meson.build
+++ b/src/libmbim-glib/test/meson.build
@@ -35,3 +35,15 @@ foreach test_unit: test_units
env: test_env,
)
endforeach
+
+if get_option('fuzzer')
+ fuzzer_name = 'test-message-fuzzer'
+ exe = executable(
+ fuzzer_name,
+ sources: fuzzer_name + '.c',
+ include_directories: top_inc,
+ dependencies: libmbim_glib_core_dep,
+ c_args: '-DLIBMBIM_GLIB_COMPILATION',
+ link_args : '-fsanitize=fuzzer',
+ )
+endif
diff --git a/src/libmbim-glib/test/test-message-fuzzer.c b/src/libmbim-glib/test/test-message-fuzzer.c
new file mode 100644
index 0000000..867f7b8
--- /dev/null
+++ b/src/libmbim-glib/test/test-message-fuzzer.c
@@ -0,0 +1,27 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * Copyright (C) 2022 Google, Inc.
+ */
+
+#include <config.h>
+#include <string.h>
+#include <stdint.h>
+#include <glib.h>
+
+#include "mbim-message.h"
+
+int
+LLVMFuzzerTestOneInput (const uint8_t *data,
+ size_t size)
+{
+ g_autoptr(MbimMessage) message = NULL;
+ g_autoptr(GError) error = NULL;
+
+ if (!size)
+ return 0;
+
+ message = mbim_message_new (data, size);
+ mbim_message_validate (message, &error);
+ return 0;
+}