diff --git a/pd/src/g_editor.c b/pd/src/g_editor.c index b2141216afbb9f4eea78bdaa01564173c1c16e69..c17610e0340d9c7fc1055dc5dbc50a22407fde79 100644 --- a/pd/src/g_editor.c +++ b/pd/src/g_editor.c @@ -2412,7 +2412,9 @@ static int do_replace_subpatches(t_canvas *x, const char* label, t_binbuf *origi static void abstracthandler_callback(t_abstracthandler *x, t_symbol *s) { char fullpath[MAXPDSTRING], label[MAXPDSTRING], *dir, *filename; + char basename[MAXPDSTRING]; memset(fullpath, '\0', MAXPDSTRING); + memset(basename, '\0', MAXPDSTRING); memset(label, '\0', MAXPDSTRING); sys_unbashfilename(s->s_name, fullpath); if (strlen(fullpath) < 3 || strcmp(fullpath+strlen(fullpath)-3, ".pd")) @@ -2420,7 +2422,7 @@ static void abstracthandler_callback(t_abstracthandler *x, t_symbol *s) filename = strrchr(fullpath, '/') + 1; fullpath[filename - fullpath - 1] = '\0'; dir = fullpath; - + strncpy(basename, filename, strlen(filename) - 3); int flag, prefix = 0; if (flag = sys_relativizepath(canvas_getdir(canvas_getrootfor(x->tarjet))->s_name, @@ -2429,7 +2431,7 @@ static void abstracthandler_callback(t_abstracthandler *x, t_symbol *s) int len = strlen(label), creator, fd = -1; if (len && label[len-1] != '/') label[len] = '/'; - strncat(label, filename, MAXPDSTRING - 4); + strncat(label, basename, MAXPDSTRING - strlen(label) - 1); /* check if there is a creator with the same name or if it's one of the built-in methods */ t_symbol *sym = gensym(label); @@ -2465,7 +2467,7 @@ static void abstracthandler_callback(t_abstracthandler *x, t_symbol *s) if (flag && prefix) { strcpy(label, "./"); - strncat(label, filename, MAXPDSTRING - 4); + strncat(label, basename, MAXPDSTRING - strlen(label) - 1); } else if (!flag) error("warning: couldn't use relative path, there is a coincidence " @@ -2476,7 +2478,7 @@ static void abstracthandler_callback(t_abstracthandler *x, t_symbol *s) memset(label, '\0', MAXPDSTRING); strcpy(label, dir); strcat(label, "/"); - strncat(label, filename, strlen(label) - 3); + strncat(label, basename, MAXPDSTRING - strlen(label) - 1); /* should check if 'filename' is one of the built-in special methods in order to inform the user about the nameclash problem */ }