]> git.notmuchmail.org Git - notmuch/commitdiff
lib/open: free value from g_key_file_get_value
authorDavid Bremner <david@tethera.net>
Sat, 6 Mar 2021 13:49:32 +0000 (09:49 -0400)
committerDavid Bremner <david@tethera.net>
Sat, 13 Mar 2021 12:58:21 +0000 (08:58 -0400)
This fixes a small memory leak.

lib/open.cc

index 4c08e9db2cf7c210c5e7a237011a6e11e71a1901..b28b64e8c1dc4c82253c8d4e8705f6ada8369b1d 100644 (file)
@@ -153,7 +153,8 @@ _load_key_file (const char *path,
 }
 
 static notmuch_status_t
-_choose_database_path (const char *config_path,
+_choose_database_path (void *ctx,
+                      const char *config_path,
                       const char *profile,
                       GKeyFile **key_file,
                       const char **database_path,
@@ -167,8 +168,13 @@ _choose_database_path (const char *config_path,
        return status;
     }
 
-    if (! *database_path && *key_file)
-       *database_path = g_key_file_get_value (*key_file, "database", "path", NULL);
+    if (! *database_path && *key_file) {
+       char *path = g_key_file_get_value (*key_file, "database", "path", NULL);
+       if (path) {
+           *database_path = talloc_strdup (ctx, path);
+           g_free (path);
+       }
+    }
 
     if (*database_path == NULL) {
        *message = strdup ("Error: Cannot open a database for a NULL path.\n");
@@ -201,7 +207,8 @@ notmuch_database_open_with_config (const char *database_path,
     GKeyFile *key_file = NULL;
     static int initialized = 0;
 
-    if ((status = _choose_database_path (config_path, profile, &key_file, &database_path, &message)))
+    if ((status = _choose_database_path (local, config_path, profile, &key_file, &database_path,
+                                        &message)))
        goto DONE;
 
     if (! (notmuch_path = talloc_asprintf (local, "%s/%s", database_path, ".notmuch"))) {
@@ -427,7 +434,8 @@ notmuch_database_create_with_config (const char *database_path,
     int err;
     void *local = talloc_new (NULL);
 
-    if ((status = _choose_database_path (config_path, profile, &key_file, &database_path, &message)))
+    if ((status = _choose_database_path (local, config_path, profile, &key_file, &database_path,
+                                        &message)))
        goto DONE;
 
     err = stat (database_path, &st);