From fd3b76f8383e7efffe22100d59f2d3d4c365dff8 Mon Sep 17 00:00:00 2001 From: Jonathan Wilkes <jon.w.wilkes@gmail.com> Date: Tue, 21 Mar 2017 20:27:19 -0400 Subject: [PATCH] fix #289: invalid read with iemguis due to partially port of the new loadbang interface. --- pd/src/g_bang.c | 7 ++++--- pd/src/g_editor.c | 2 +- pd/src/g_numbox.c | 6 +++--- pd/src/g_radio.c | 7 ++++--- pd/src/g_slider.c | 6 +++--- pd/src/g_toggle.c | 6 +++--- pd/src/m_binbuf.c | 3 ++- pd/src/x_misc.c | 2 +- 8 files changed, 21 insertions(+), 18 deletions(-) diff --git a/pd/src/g_bang.c b/pd/src/g_bang.c index b7debd7d9..bedbb664d 100644 --- a/pd/src/g_bang.c +++ b/pd/src/g_bang.c @@ -390,9 +390,9 @@ static void bng_list(t_bng *x, t_symbol *s, int ac, t_atom *av){bng_bang2(x);} static void bng_anything(t_bng *x, t_symbol *s, int argc, t_atom *argv) {bng_bang2(x);} -static void bng_loadbang(t_bng *x) +static void bng_loadbang(t_bng *x, t_floatarg action) { - if(!sys_noloadbang && x->x_gui.x_loadinit) + if (action == LB_LOAD && x->x_gui.x_loadinit) { bng_set(x); bng_bout(x,0); @@ -528,7 +528,8 @@ void g_bang_setup(void) A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, 0); class_addmethod(bng_class, (t_method)bng_dialog, gensym("dialog"), A_GIMME, 0); - class_addmethod(bng_class, (t_method)bng_loadbang, gensym("loadbang"), 0); + class_addmethod(bng_class, (t_method)bng_loadbang, gensym("loadbang"), + A_DEFFLOAT, 0); class_addmethod(bng_class, (t_method)bng_size, gensym("size"), A_GIMME, 0); iemgui_class_addmethods(bng_class); class_addmethod(bng_class, (t_method)bng_flashtime, gensym("flashtime"), diff --git a/pd/src/g_editor.c b/pd/src/g_editor.c index 0dc859651..3fdf9473b 100644 --- a/pd/src/g_editor.c +++ b/pd/src/g_editor.c @@ -6116,7 +6116,7 @@ static t_canvas *paste_canvas; static void glist_donewloadbangs(t_glist *x) { - if (x->gl_editor) + if (!sys_noloadbang && x->gl_editor) { t_selection *sel; for (sel = x->gl_editor->e_selection; sel; sel = sel->sel_next) diff --git a/pd/src/g_numbox.c b/pd/src/g_numbox.c index a46532bcc..9de4cf189 100644 --- a/pd/src/g_numbox.c +++ b/pd/src/g_numbox.c @@ -683,9 +683,9 @@ static void my_numbox_lin(t_my_numbox *x) x->x_lin0_log1 = 0; } -static void my_numbox_loadbang(t_my_numbox *x) +static void my_numbox_loadbang(t_my_numbox *x, t_floatarg action) { - if(!sys_noloadbang && x->x_gui.x_loadinit) + if (action == LB_LOAD && x->x_gui.x_loadinit) { sys_queuegui(x, x->x_gui.x_glist, my_numbox_draw_update); my_numbox_bang(x); @@ -858,7 +858,7 @@ void g_numbox_setup(void) class_addmethod(my_numbox_class, (t_method)my_numbox_dialog, gensym("dialog"), A_GIMME, 0); class_addmethod(my_numbox_class, (t_method)my_numbox_loadbang, - gensym("loadbang"), 0); + gensym("loadbang"), A_DEFFLOAT, 0); class_addmethod(my_numbox_class, (t_method)my_numbox_set, gensym("set"), A_FLOAT, 0); class_addmethod(my_numbox_class, (t_method)my_numbox_size, diff --git a/pd/src/g_radio.c b/pd/src/g_radio.c index 6a7f2e0a6..eaf924e87 100644 --- a/pd/src/g_radio.c +++ b/pd/src/g_radio.c @@ -419,9 +419,9 @@ static int radio_newclick(t_gobj *z, struct _glist *glist, int xpix, int ypix, return (1); } -static void radio_loadbang(t_radio *x) +static void radio_loadbang(t_radio *x, t_floatarg action) { - if(!sys_noloadbang && x->x_gui.x_loadinit) + if(action == LB_LOAD && x->x_gui.x_loadinit) { radio_bang(x); } @@ -529,7 +529,8 @@ void radio_addmethods(t_class *c) { class_addbang(c, radio_bang); class_addfloat(c, radio_float); - class_addmethod(c, (t_method)radio_loadbang, gensym("loadbang"), 0); + class_addmethod(c, (t_method)radio_loadbang, gensym("loadbang"), + A_DEFFLOAT, 0); class_addmethod(c, (t_method)radio_set, gensym("set"), A_FLOAT, 0); class_addmethod(c, (t_method)radio_size, gensym("size"), A_GIMME, 0); class_addmethod(c, (t_method)iemgui_init, gensym("init"), A_FLOAT, 0); diff --git a/pd/src/g_slider.c b/pd/src/g_slider.c index cc061b6f3..e4849f5ac 100644 --- a/pd/src/g_slider.c +++ b/pd/src/g_slider.c @@ -483,9 +483,9 @@ static void slider_steady(t_slider *x, t_floatarg f) x->x_steady = (f==0.0)?0:1; } -static void slider_loadbang(t_slider *x) +static void slider_loadbang(t_slider *x, t_floatarg action) { - if(!sys_noloadbang && x->x_gui.x_loadinit) + if(action == LB_LOAD && x->x_gui.x_loadinit) { x->x_gui.x_draw(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE); slider_bang(x); @@ -597,7 +597,7 @@ static void slider_free(t_slider *x) void slider_addmethods(t_class *c) { class_addmethod(c, (t_method)slider_loadbang, - gensym("loadbang"), 0); + gensym("loadbang"), A_DEFFLOAT, 0); class_addmethod(c, (t_method)slider_set, gensym("set"), A_FLOAT, 0); class_addmethod(c, (t_method)slider_log, gensym("log"), 0); diff --git a/pd/src/g_toggle.c b/pd/src/g_toggle.c index 9292f1d08..d89c73852 100644 --- a/pd/src/g_toggle.c +++ b/pd/src/g_toggle.c @@ -328,9 +328,9 @@ static void toggle_fout(t_toggle *x, t_floatarg f) iemgui_out_float(&x->x_gui, 0, 0, x->x_on); } -static void toggle_loadbang(t_toggle *x) +static void toggle_loadbang(t_toggle *x, t_floatarg action) { - if(!sys_noloadbang && x->x_gui.x_loadinit) + if (action == LB_LOAD && x->x_gui.x_loadinit) toggle_fout(x, (t_float)x->x_on); } @@ -440,7 +440,7 @@ void g_toggle_setup(void) class_addmethod(toggle_class, (t_method)toggle_dialog, gensym("dialog"), A_GIMME, 0); class_addmethod(toggle_class, (t_method)toggle_loadbang, gensym("loadbang"), - 0); + A_DEFFLOAT, 0); class_addmethod(toggle_class, (t_method)toggle_set, gensym("set"), A_FLOAT, 0); class_addmethod(toggle_class, (t_method)toggle_size, gensym("size"), diff --git a/pd/src/m_binbuf.c b/pd/src/m_binbuf.c index 69d5c3977..9d3582a8d 100644 --- a/pd/src/m_binbuf.c +++ b/pd/src/m_binbuf.c @@ -1697,7 +1697,8 @@ t_pd *glob_evalfile(t_pd *ignore, t_symbol *name, t_symbol *dir) x = s__X.s_thing; vmess(x, gensym("pop"), "i", 1); } - pd_doloadbang(); + if (!sys_noloadbang) + pd_doloadbang(); canvas_resume_dsp(dspstate); s__X.s_thing = boundx; return x; diff --git a/pd/src/x_misc.c b/pd/src/x_misc.c index 75ce3c30f..27d489e2a 100644 --- a/pd/src/x_misc.c +++ b/pd/src/x_misc.c @@ -117,7 +117,7 @@ static void loadbang_click(t_loadbang *x, static void loadbang_loadbang(t_loadbang *x, t_floatarg action) { - if (!sys_noloadbang && action == LB_LOAD) + if (action == LB_LOAD) outlet_bang(x->x_obj.ob_outlet); } -- GitLab