Index: x_gui.c =================================================================== --- x_gui.c (revision 11016) +++ x_gui.c (working copy) @@ -49,6 +49,9 @@ { char buf[4*MAXPDSTRING]; char namebuf[80]; + char sprintfbuf[MAXPDSTRING]; + char *afterpercent; + t_int afterpercentlen; t_gfxstub *x; t_symbol *s; /* if any exists with matching key, burn it. */ @@ -71,7 +74,13 @@ x->x_key = key; x->x_next = gfxstub_list; gfxstub_list = x; - sprintf(buf, cmd, s->s_name); + /* only replace first %s so sprintf() doesn't crash */ + afterpercent = strchr(cmd, '%') + 2; + afterpercentlen = afterpercent - cmd; + strncpy(sprintfbuf, cmd, afterpercentlen); + sprintfbuf[afterpercentlen] = '\0'; + sprintf(buf, sprintfbuf, s->s_name); + strncat(buf, afterpercent, (4*MAXPDSTRING) - afterpercentlen); sys_gui(buf); }