test: add a fuzzer for the varlink IDL stuff

This commit is contained in:
Frantisek Sumsal
2023-10-14 17:40:07 +02:00
parent 4b2391c4e3
commit 13de7c7e66
3 changed files with 134 additions and 0 deletions
+33
View File
@@ -0,0 +1,33 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#include <unistd.h>
#include "errno-util.h"
#include "fd-util.h"
#include "fuzz.h"
#include "io-util.h"
#include "varlink-idl.h"
#include "log.h"
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
_cleanup_(varlink_interface_freep) VarlinkInterface *vi = NULL;
_cleanup_free_ char *str = NULL, *dump = NULL;
int r;
log_set_max_level(LOG_CRIT);
log_parse_environment();
(void) log_open();
assert_se(str = memdup_suffix0(data, size));
r = varlink_idl_parse(str, /* line= */ NULL, /* column= */ NULL, &vi);
if (r < 0) {
log_debug_errno(r, "Failed to parse varlink interface definition: %m");
return 0;
}
assert_se(varlink_idl_format(vi, &dump) >= 0);
(void) varlink_idl_consistent(vi, LOG_DEBUG);
return 0;
}
+1
View File
@@ -12,4 +12,5 @@ simple_fuzzers += files(
'fuzz-time-util.c',
'fuzz-udev-database.c',
'fuzz-varlink.c',
'fuzz-varlink-idl.c',
)
+100
View File
@@ -0,0 +1,100 @@
# https://varlink.org/Interface-Definition
interface org.foo.bar
type MyOtherType(
x: T
)
type T ( x: TT )
type TT ( x: TTT )
type TTT ( x: TTTT )
type TTTT ( x: TTTTT )
type TTTTT ( x: TTTTTT )
type TTTTTT ( x: TTTTTTT )
type TTTTTTT ( x: TTTTTTTT )
type TTTTTTTT ( x: TTTTTTTTT )
type TTTTTTTTT ( x: TTTTTTTTTT )
type TTTTTTTTTT ( x: TTTTTTTTTTT )
type TTTTTTTTTTT ( x: TTTTTTTTTTTT )
type TTTTTTTTTTTT ( x: TTTTTTTTTTTTT )
type TTTTTTTTTTTTT ( x: TTTTTTTTTTTTTT )
type TTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT )
type TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ( x: bool )
type MyType (
example_bool: bool,
example_int: int,
example_float: float,
example_string: string,
example_object: object,
example_enum_single: (one),
example_enum: (one, two, three),
example_struct_single: (first: int),
example_struct: (first: int, second: string),
example_array: []string,
example_dictionary: [string]string,
example_stringset: [string](a, b, c),
example_stringset2: [string](a: int, b: bool, c: object),
example_nullable: ?string,
example_nullable_array_struct: ?[](first: int, second: string),
example_other_type: MyOtherType
)
method Foo(a: int, b: MyType) -> (bar: []string, baz: float, more: (i: int, f: float, s: string))
method VoidArgs() -> (a: int)
method VoidRet(a: int) -> ()
method Void() -> ()
error UnknownAction(action: string, more_data: ?string)
error VoidError()