/src/systemd/src/xdg-autostart-generator/fuzz-xdg-desktop.c
Line | Count | Source |
1 | | /* SPDX-License-Identifier: LGPL-2.1-or-later */ |
2 | | |
3 | | #include <unistd.h> |
4 | | |
5 | | #include "fd-util.h" |
6 | | #include "fuzz.h" |
7 | | #include "rm-rf.h" |
8 | | #include "tmpfile-util.h" |
9 | | #include "xdg-autostart-service.h" |
10 | | |
11 | 2.42k | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { |
12 | 2.42k | _cleanup_(unlink_tempfilep) char name[] = "/tmp/fuzz-xdg-desktop.XXXXXX"; |
13 | 2.42k | _cleanup_close_ int fd = -EBADF; |
14 | 2.42k | _cleanup_(xdg_autostart_service_freep) XdgAutostartService *service = NULL; |
15 | 2.42k | _cleanup_(rm_rf_physical_and_freep) char *tmpdir = NULL; |
16 | | |
17 | 2.42k | if (outside_size_range(size, 0, 65536)) |
18 | 8 | return 0; |
19 | | |
20 | 2.41k | fuzz_setup_logging(); |
21 | | |
22 | 2.41k | assert_se(mkdtemp_malloc("/tmp/fuzz-xdg-desktop-XXXXXX", &tmpdir) >= 0); |
23 | | |
24 | 2.41k | fd = mkostemp_safe(name); |
25 | 2.41k | assert_se(fd >= 0); |
26 | 2.41k | assert_se(write(fd, data, size) == (ssize_t) size); |
27 | | |
28 | 2.41k | assert_se(service = xdg_autostart_service_parse_desktop(name)); |
29 | 2.41k | assert_se(service->name = strdup("fuzz-xdg-desktop.service")); |
30 | 2.41k | (void) xdg_autostart_service_generate_unit(service, tmpdir); |
31 | | |
32 | 2.41k | return 0; |
33 | 2.42k | } |