1
0
mirror of https://github.com/systemd/systemd.git synced 2025-01-10 05:18:17 +03:00

core/transaction: make merge_unit_ids() always return NUL-terminated string

Follow-up for 924775e8ce.

The loop run with `STRV_FOREACH_PAIR()`, hence `if (*(unit_id+1))` is
not a good way to detect if there exist a next entry.

Fixes #26872.
This commit is contained in:
Yu Watanabe 2023-03-18 12:12:01 +09:00
parent 6c2caf5053
commit 366eced4c8

View File

@ -323,22 +323,25 @@ _pure_ static bool unit_matters_to_anchor(Unit *u, Job *job) {
return false;
}
static char* merge_unit_ids(const char* unit_log_field, char **pairs) {
char *ans = NULL;
size_t size = 0, next;
static char* merge_unit_ids(const char* unit_log_field, char * const* pairs) {
_cleanup_free_ char *ans = NULL;
size_t size = 0;
STRV_FOREACH_PAIR(unit_id, job_type, pairs) {
size_t next;
if (size > 0)
ans[size - 1] = '\n';
next = strlen(unit_log_field) + strlen(*unit_id);
if (!GREEDY_REALLOC(ans, size + next + 1))
return mfree(ans);
return NULL;
sprintf(ans + size, "%s%s", unit_log_field, *unit_id);
if (*(unit_id+1))
ans[size + next] = '\n';
size += next + 1;
}
return ans;
return TAKE_PTR(ans);
}
static int transaction_verify_order_one(Transaction *tr, Job *j, Job *from, unsigned generation, sd_bus_error *e) {