]>
Commit | Line | Data |
---|---|---|
24e6759c FS |
1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ |
2 | ||
3 | #include <stdio.h> | |
4 | ||
5 | #include "alloc-util.h" | |
6 | #include "fd-util.h" | |
7 | #include "fuzz.h" | |
8 | #include "manager-serialize.h" | |
9 | #include "manager.h" | |
10 | #include "service.h" | |
11 | ||
12 | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { | |
13 | _cleanup_(manager_freep) Manager *m = NULL; | |
14 | _cleanup_fclose_ FILE *f = NULL, *null = NULL; | |
15 | _cleanup_fdset_free_ FDSet *fdset = NULL; | |
16 | ||
17 | /* We don't want to fill the logs with messages about parse errors. | |
18 | * Disable most logging if not running standalone. */ | |
19 | if (!getenv("SYSTEMD_LOG_LEVEL")) { | |
20 | log_set_max_level(LOG_CRIT); | |
21 | log_set_target(LOG_TARGET_NULL); | |
22 | } | |
23 | ||
eb1c0357 | 24 | assert_se(manager_new(RUNTIME_SCOPE_SYSTEM, MANAGER_TEST_RUN_MINIMAL, &m) >= 0); |
24e6759c FS |
25 | /* Set log overrides as well to make it harder for a serialization file |
26 | * to switch log levels/targets during fuzzing */ | |
27 | manager_override_log_level(m, log_get_max_level()); | |
28 | manager_override_log_target(m, log_get_target()); | |
29 | assert_se(null = fopen("/dev/null", "we")); | |
30 | assert_se(fdset = fdset_new()); | |
31 | assert_se(f = data_to_file(data, size)); | |
32 | ||
33 | (void) manager_deserialize(m, f, fdset); | |
34 | (void) manager_serialize(m, null, fdset, true); | |
35 | (void) manager_serialize(m, null, fdset, false); | |
36 | ||
37 | return 0; | |
38 | } |