1 /* SPDX-License-Identifier: LGPL-2.1+ */
3 #include "conf-parser.h"
8 #include "load-fragment.h"
9 #include "string-util.h"
12 int LLVMFuzzerTestOneInput(const uint8_t *data
, size_t size
) {
13 _cleanup_free_
char *out
= NULL
; /* out should be freed after g */
15 _cleanup_fclose_
FILE *f
= NULL
, *g
= NULL
;
16 _cleanup_free_
char *p
= NULL
;
18 _cleanup_(manager_freep
) Manager
*m
= NULL
;
25 f
= fmemopen((char*) data
, size
, "re");
28 if (read_line(f
, LINE_MAX
, &p
) < 0)
31 t
= unit_type_from_string(p
);
35 if (!unit_vtable
[t
]->load
)
38 /* We don't want to fill the logs with messages about parse errors.
39 * Disable most logging if not running standalone */
40 if (!getenv("SYSTEMD_LOG_LEVEL"))
41 log_set_max_level(LOG_CRIT
);
43 assert_se(manager_new(UNIT_FILE_SYSTEM
, MANAGER_TEST_RUN_MINIMAL
, &m
) >= 0);
45 name
= strjoina("a.", unit_type_to_string(t
));
46 assert_se(unit_new_for_name(m
, unit_vtable
[t
]->object_size
, name
, &u
) >= 0);
48 (void) config_parse(name
, name
, f
,
49 UNIT_VTABLE(u
)->sections
,
50 config_item_perf_lookup
, load_fragment_gperf_lookup
,
51 CONFIG_PARSE_ALLOW_INCLUDE
, u
);
53 g
= open_memstream(&out
, &out_size
);