b4n requested changes on this pull request.

Leaks should be fixed.

> @@ -205,6 +205,26 @@ static gchar *generate_find_string(GeanyProject *prj)
 }
 
 
+static const gchar *get_base_path(void)
+{
+       static gchar *ret = NULL;
+       GeanyProject *prj = geany_data->app->project;
+       gchar *project_dir_utf8;
+
+       if (!prj)
+               return NULL;
+
+       if (g_path_is_absolute(prj->base_path))
+               return prj->base_path;
+
+       g_free(ret);

not useful as it's always `NULL` at this point

> @@ -205,6 +205,26 @@ static gchar *generate_find_string(GeanyProject *prj)
 }
 
 
+static const gchar *get_base_path(void)

this function has a leaky semantic: it returns *either* `prj->base_path` *or* 
an allocated buffer.  The caller must then free conditionally, which is tricky 
at best.

> @@ -236,7 +256,7 @@ on_generate_tags(GtkMenuItem *menuitem, gpointer 
> user_data)
                        tag_filename, "\"", NULL);
 #endif
 
-               spawn_cmd(cmd, prj->base_path);
+               spawn_cmd(cmd, get_base_path());

leaks when `prj->base_path` is relative

> @@ -421,7 +441,7 @@ static void find_tags(const gchar *name, gboolean 
> declaration, gboolean case_sen
                return;
 
        msgwin_clear_tab(MSG_MESSAGE);
-       msgwin_set_messages_dir(prj->base_path);
+       msgwin_set_messages_dir(get_base_path());

same

> @@ -445,7 +465,7 @@ static void find_tags(const gchar *name, gboolean 
> declaration, gboolean case_sen
 
                        if (!filter_tag(&entry, name_pat, declaration, 
case_sensitive))
                        {
-                               path = g_build_filename(prj->base_path, 
entry.file, NULL);
+                               path = g_build_filename(get_base_path(), 
entry.file, NULL);

more

> @@ -456,7 +476,7 @@ static void find_tags(const gchar *name, gboolean 
> declaration, gboolean case_sen
                                if (!filter_tag(&entry, name_pat, declaration, 
case_sensitive))
                                {
                                        if (!path)
-                                               path = 
g_build_filename(prj->base_path, entry.file, NULL);
+                                               path = 
g_build_filename(get_base_path(), entry.file, NULL);

and… it's me again :grin: 

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/geany/geany-plugins/pull/755#pullrequestreview-128843147

Reply via email to