summaryrefslogtreecommitdiff
path: root/src/basic/locale-util.c
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2022-06-14 09:04:00 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2022-06-14 20:56:23 +0900
commit065058e63b566e21af737150ecd12bff57b97124 (patch)
treedc55192c2751ddae48621eb34d844edbbf75797d /src/basic/locale-util.c
parent39f4546199d6394014cf79b76b9ff22d3c149c54 (diff)
downloadsystemd-065058e63b566e21af737150ecd12bff57b97124.tar.gz
locale-util: fix memleak on failure
Diffstat (limited to 'src/basic/locale-util.c')
-rw-r--r--src/basic/locale-util.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/basic/locale-util.c b/src/basic/locale-util.c
index cb99641263..3fce1a55f6 100644
--- a/src/basic/locale-util.c
+++ b/src/basic/locale-util.c
@@ -160,7 +160,7 @@ static int add_locales_from_archive(Set *locales) {
return r;
}
-static int add_locales_from_libdir (Set *locales) {
+static int add_locales_from_libdir(Set *locales) {
_cleanup_closedir_ DIR *dir = NULL;
int r;
@@ -187,7 +187,7 @@ static int add_locales_from_libdir (Set *locales) {
}
int get_locales(char ***ret) {
- _cleanup_set_free_ Set *locales = NULL;
+ _cleanup_set_free_free_ Set *locales = NULL;
_cleanup_strv_free_ char **l = NULL;
int r;
@@ -207,6 +207,9 @@ int get_locales(char ***ret) {
if (!l)
return -ENOMEM;
+ /* Now, all elements are owned by strv 'l'. Hence, do not call set_free_free(). */
+ locales = set_free(locales);
+
r = getenv_bool("SYSTEMD_LIST_NON_UTF8_LOCALES");
if (r == -ENXIO || r == 0) {
char **a, **b;