]>
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 | ||
7233c679 YW |
17 | if (outside_size_range(size, 0, 65536)) |
18 | return 0; | |
19 | ||
24e6759c FS |
20 | /* We don't want to fill the logs with messages about parse errors. |
21 | * Disable most logging if not running standalone. */ | |
22 | if (!getenv("SYSTEMD_LOG_LEVEL")) { | |
23 | log_set_max_level(LOG_CRIT); | |
24 | log_set_target(LOG_TARGET_NULL); | |
25 | } | |
26 | ||
eb1c0357 | 27 | assert_se(manager_new(RUNTIME_SCOPE_SYSTEM, MANAGER_TEST_RUN_MINIMAL, &m) >= 0); |
24e6759c FS |
28 | /* Set log overrides as well to make it harder for a serialization file |
29 | * to switch log levels/targets during fuzzing */ | |
30 | manager_override_log_level(m, log_get_max_level()); | |
31 | manager_override_log_target(m, log_get_target()); | |
32 | assert_se(null = fopen("/dev/null", "we")); | |
33 | assert_se(fdset = fdset_new()); | |
34 | assert_se(f = data_to_file(data, size)); | |
35 | ||
36 | (void) manager_deserialize(m, f, fdset); | |
37 | (void) manager_serialize(m, null, fdset, true); | |
38 | (void) manager_serialize(m, null, fdset, false); | |
39 | ||
40 | return 0; | |
41 | } |