From 9b632677a259f84c6bc2f69085414754a1db7e6b Mon Sep 17 00:00:00 2001 From: jaycox Date: Sun, 5 Nov 2000 14:11:45 +0000 Subject: [PATCH] Make sure that we are not using bad file names for generated brushes. * app/gimpbrushlist.c: Make sure that we are not using bad file names for generated brushes. --- app/gimpbrushlist.c | 50 ++++++++++++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/app/gimpbrushlist.c b/app/gimpbrushlist.c index 73d7e6252d..db4045efd0 100644 --- a/app/gimpbrushlist.c +++ b/app/gimpbrushlist.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #ifdef HAVE_UNISTD_H @@ -258,39 +259,50 @@ brushes_free (void) if (GIMP_IS_BRUSH_GENERATED (brush) && vbr_dir) { - gchar *filename = g_strdup (brush->filename); - - if (!filename) + gchar *filename = NULL; + if (!brush->filename) { FILE *tmp_fp; gint unum = 0; - filename = g_strconcat (vbr_dir, - brush->name, ".vbr", - NULL); + if (vbr_dir) + { + char *safe_name; + int i; + /* make sure we don't create a naughty filename */ + safe_name = g_strdup(brush->name); + if (safe_name[0] == '.') + safe_name[0] = '_'; + for (i = 0; safe_name[i]; i++) + if (safe_name[i] == G_DIR_SEPARATOR || isspace(safe_name[i])) + safe_name[i] = '_'; - /* make sure we don't overwrite an existing brush */ - while ((tmp_fp = fopen (filename, "r"))) - { - fclose (tmp_fp); - g_free (filename); - filename = g_strdup_printf ("%s%s_%d.vbr", + filename = g_strdup_printf ("%s%s.vbr", vbr_dir, - brush->name, - unum); - unum++; + safe_name); + while ((tmp_fp = fopen (filename, "r"))) + { /* make sure we don't overite an existing brush */ + fclose (tmp_fp); + g_free (filename); + filename = g_strdup_printf ("%s%s_%d.vbr", + vbr_dir, safe_name, unum); + unum++; + } + g_free (safe_name); } } else { - if (strcmp (&filename[strlen (filename) - 4], ".vbr")) - { + filename = g_strdup (brush->filename); + if (strlen(filename) < 4 || strcmp (&filename[strlen (filename) - 4], + ".vbr")) + { /* we only want to save .vbr files, so set filename to null + if this isn't a .vbr file */ g_free (filename); filename = NULL; } } - - /* okay we are ready to try to save the generated file */ + /* we are (finaly) ready to try to save the generated brush file */ if (filename) { gimp_brush_generated_save (GIMP_BRUSH_GENERATED (brush),