Revision: 2065 http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=2065&view=re... Author: colombanw Date: 2011-05-12 20:55:11 +0000 (Thu, 12 May 2011)
Log Message: ----------- TreeBrowser: Fix crash and memory leak in treebrowser.c.
In path_is_in_dir(), if it's about to return NULL (if the function parameters have no path components in common) it tried to free() a string literal, which causes a crash. In the same function, there was a memory leak, because diffed_path was reassigned without being free()'d before.
Fix both problems.
Patch by Thomas Martitz, thanks.
Modified Paths: -------------- trunk/geany-plugins/treebrowser/src/treebrowser.c
Modified: trunk/geany-plugins/treebrowser/src/treebrowser.c =================================================================== --- trunk/geany-plugins/treebrowser/src/treebrowser.c 2011-05-10 02:15:23 UTC (rev 2064) +++ trunk/geany-plugins/treebrowser/src/treebrowser.c 2011-05-12 20:55:11 UTC (rev 2065) @@ -222,13 +222,15 @@ #endif }
+ +/* result must be freed */ static gchar* path_is_in_dir(gchar* src, gchar* find) { int i = 0;
gboolean found = FALSE; - gchar *diffed_path = "", *tmp = NULL; + gchar *diffed_path = NULL, *tmp = NULL; gchar **src_segments = NULL, **find_segments = NULL; guint src_segments_n = 0, find_segments_n = 0, n = 0;
@@ -247,7 +249,9 @@ break; else { - tmp = g_strconcat(diffed_path, G_DIR_SEPARATOR_S, find_segments[i], NULL); + tmp = g_strconcat(diffed_path == NULL ? "" : diffed_path, + G_DIR_SEPARATOR_S, find_segments[i], NULL); + g_free(diffed_path); diffed_path = g_strdup(tmp); g_free(tmp); found = TRUE; @@ -258,7 +262,6 @@
if (found) return diffed_path; - g_free(diffed_path); return NULL; }
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
plugins-commits@lists.geany.org