test: add a fuzzer for the varlink IDL stuff
This commit is contained in:
@@ -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;
|
||||
}
|
||||
@@ -12,4 +12,5 @@ simple_fuzzers += files(
|
||||
'fuzz-time-util.c',
|
||||
'fuzz-udev-database.c',
|
||||
'fuzz-varlink.c',
|
||||
'fuzz-varlink-idl.c',
|
||||
)
|
||||
|
||||
@@ -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()
|
||||
Reference in New Issue
Block a user