From c230dbdc60fc16e59a6b8cb9b893b5162db368b8 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Tue, 14 Apr 2009 01:43:56 +0000 Subject: fixed crasher bug #2030557 caused by % in GUI labels. So it turns out that BSD's sprintf() isn't as fault-tolerant as GNU's. It was crashing on unescaped %, I guess it was trying to replace them and failing miserably. This patch fixes it by only running the first % pattern thru the sprintf() then just copying the rest before sending it to sys_gui(); svn path=/trunk/; revision=11017 --- packages/patches/fix_gui_%_crash-0.42-4.patch | 29 +++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 packages/patches/fix_gui_%_crash-0.42-4.patch (limited to 'packages') diff --git a/packages/patches/fix_gui_%_crash-0.42-4.patch b/packages/patches/fix_gui_%_crash-0.42-4.patch new file mode 100644 index 00000000..02c39313 --- /dev/null +++ b/packages/patches/fix_gui_%_crash-0.42-4.patch @@ -0,0 +1,29 @@ +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); + } + -- cgit v1.2.1