Commit ddd1188d971283e6cbcd7bcf8cbc056a75b91ced

Emmanuel Gil Peyrot 2020-07-17T01:09:47

Make path retrieval consistent in xkb_compose_table_new_from_locale()

diff --git a/src/compose/paths.c b/src/compose/paths.c
index aab4507..dab71ac 100644
--- a/src/compose/paths.c
+++ b/src/compose/paths.c
@@ -143,10 +143,10 @@ resolve_locale(const char *locale)
     return alias ? alias : strdup(locale);
 }
 
-const char *
+char *
 get_xcomposefile_path(void)
 {
-    return secure_getenv("XCOMPOSEFILE");
+    return strdup_safe(secure_getenv("XCOMPOSEFILE"));
 }
 
 char *
diff --git a/src/compose/paths.h b/src/compose/paths.h
index 53d7415..bc5150f 100644
--- a/src/compose/paths.h
+++ b/src/compose/paths.h
@@ -30,7 +30,7 @@ resolve_locale(const char *locale);
 const char *
 get_xlocaledir_path(void);
 
-const char *
+char *
 get_xcomposefile_path(void);
 
 char *
diff --git a/src/compose/table.c b/src/compose/table.c
index 1843c46..38d4406 100644
--- a/src/compose/table.c
+++ b/src/compose/table.c
@@ -161,8 +161,7 @@ xkb_compose_table_new_from_locale(struct xkb_context *ctx,
                                   enum xkb_compose_compile_flags flags)
 {
     struct xkb_compose_table *table;
-    char *path = NULL;
-    const char *cpath;
+    char *path;
     FILE *file;
     bool ok;
 
@@ -176,48 +175,47 @@ xkb_compose_table_new_from_locale(struct xkb_context *ctx,
     if (!table)
         return NULL;
 
-    cpath = get_xcomposefile_path();
-    if (cpath) {
-        file = fopen(cpath, "rb");
+    path = get_xcomposefile_path();
+    if (path) {
+        file = fopen(path, "rb");
         if (file)
             goto found_path;
     }
+    free(path);
 
-    cpath = path = get_xdg_xcompose_file_path();
+    path = get_xdg_xcompose_file_path();
     if (path) {
         file = fopen(path, "rb");
         if (file)
             goto found_path;
     }
     free(path);
-    path = NULL;
 
-    cpath = path = get_home_xcompose_file_path();
+    path = get_home_xcompose_file_path();
     if (path) {
         file = fopen(path, "rb");
         if (file)
             goto found_path;
     }
     free(path);
-    path = NULL;
 
-    cpath = path = get_locale_compose_file_path(table->locale);
+    path = get_locale_compose_file_path(table->locale);
     if (path) {
         file = fopen(path, "rb");
         if (file)
             goto found_path;
     }
     free(path);
-    path = NULL;
 
     log_err(ctx, "couldn't find a Compose file for locale \"%s\"\n", locale);
     xkb_compose_table_unref(table);
     return NULL;
 
 found_path:
-    ok = parse_file(table, file, cpath);
+    ok = parse_file(table, file, path);
     fclose(file);
     if (!ok) {
+        free(path);
         xkb_compose_table_unref(table);
         return NULL;
     }