aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/patches/fix_gui_%_crash-0.42-4.patch29
1 files changed, 29 insertions, 0 deletions
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);
+ }
+