mirror of
https://github.com/systemd/systemd.git
synced 2024-12-03 23:33:38 +08:00
shared/path-lookup: fix leak
CID #1354671: char **l would be leaked. Also rename l to paths, to make the code easier to read, and do strv deduplication immediately when extending. No need to allocate strings to remove them a few lines down.
This commit is contained in:
parent
ea9b54f827
commit
e215d211d2
@ -451,7 +451,7 @@ int lookup_paths_init(
|
||||
*transient = NULL,
|
||||
*persistent_control = NULL, *runtime_control = NULL;
|
||||
bool append = false; /* Add items from SYSTEMD_UNIT_PATH before normal directories */
|
||||
char **l = NULL;
|
||||
_cleanup_strv_free_ char **paths = NULL;
|
||||
const char *e;
|
||||
int r;
|
||||
|
||||
@ -506,13 +506,12 @@ int lookup_paths_init(
|
||||
/* FIXME: empty components in other places should be
|
||||
* rejected. */
|
||||
|
||||
r = path_split_and_make_absolute(e, &l);
|
||||
r = path_split_and_make_absolute(e, &paths);
|
||||
if (r < 0)
|
||||
return r;
|
||||
} else
|
||||
l = NULL;
|
||||
}
|
||||
|
||||
if (!l || append) {
|
||||
if (!paths || append) {
|
||||
/* Let's figure something out. */
|
||||
|
||||
_cleanup_strv_free_ char **add = NULL;
|
||||
@ -587,14 +586,9 @@ int lookup_paths_init(
|
||||
if (!add)
|
||||
return -ENOMEM;
|
||||
|
||||
if (l) {
|
||||
r = strv_extend_strv(&l, add, false);
|
||||
if (r < 0)
|
||||
r = strv_extend_strv(&paths, add, true);
|
||||
if (r < 0)
|
||||
return r;
|
||||
} else {
|
||||
l = add;
|
||||
add = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
r = patch_root_prefix(&persistent_config, root);
|
||||
@ -626,12 +620,12 @@ int lookup_paths_init(
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = patch_root_prefix_strv(l, root);
|
||||
r = patch_root_prefix_strv(paths, root);
|
||||
if (r < 0)
|
||||
return -ENOMEM;
|
||||
|
||||
p->search_path = strv_uniq(l);
|
||||
l = NULL;
|
||||
p->search_path = strv_uniq(paths);
|
||||
paths = NULL;
|
||||
|
||||
p->persistent_config = persistent_config;
|
||||
p->runtime_config = runtime_config;
|
||||
|
Loading…
Reference in New Issue
Block a user