diff options
author | Aleksander Morgado <aleksandermj@chromium.org> | 2022-10-31 14:22:58 +0000 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2022-11-22 10:15:09 +0000 |
commit | b9ac0a4f88bdb8e9dd2b0fcfe8fa8b01c07d4b7d (patch) | |
tree | f115f409fe33c33484ca8fcb89f1596a72248c5c | |
parent | 9e9d54e6c98566ebf56d893de5f6162809f2648a (diff) | |
download | libqmi-b9ac0a4f88bdb8e9dd2b0fcfe8fa8b01c07d4b7d.tar.gz |
libqmi-glib,test: add fuzzer test for qmi_message_new_from_raw()
-rw-r--r-- | meson.build | 3 | ||||
-rw-r--r-- | meson_options.txt | 2 | ||||
-rw-r--r-- | src/libqmi-glib/test/meson.build | 12 | ||||
-rw-r--r-- | src/libqmi-glib/test/test-message-fuzzer.c | 28 |
4 files changed, 45 insertions, 0 deletions
diff --git a/meson.build b/meson.build index afc69350..8b23a1cc 100644 --- a/meson.build +++ b/meson.build @@ -239,6 +239,8 @@ if enable_man subdir('docs/man') endif +enable_fuzzer = get_option('fuzzer') + configure_file( output: 'config.h', configuration: config_h, @@ -251,6 +253,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 3f3a22b0..491961ef 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -19,3 +19,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/libqmi-glib/test/meson.build b/src/libqmi-glib/test/meson.build index 884d2721..eef08214 100644 --- a/src/libqmi-glib/test/meson.build +++ b/src/libqmi-glib/test/meson.build @@ -39,3 +39,15 @@ foreach test_name, test_args: 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: libqmi_glib_dep, + c_args: '-DLIBQMI_GLIB_COMPILATION', + link_args : '-fsanitize=fuzzer', + ) +endif diff --git a/src/libqmi-glib/test/test-message-fuzzer.c b/src/libqmi-glib/test/test-message-fuzzer.c new file mode 100644 index 00000000..b344a017 --- /dev/null +++ b/src/libqmi-glib/test/test-message-fuzzer.c @@ -0,0 +1,28 @@ +/* -*- 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 "qmi-message.h" + +int +LLVMFuzzerTestOneInput (const uint8_t *data, + size_t size) +{ + g_autoptr(GByteArray) bytearray = NULL; + g_autoptr(QmiMessage) message = NULL; + g_autoptr(GError) error = NULL; + + if (!size) + return 0; + + bytearray = g_byte_array_append (g_byte_array_sized_new (size), data, size); + message = qmi_message_new_from_raw (bytearray, &error); + return 0; +} |