From d6cfcc7befced088f860f82816a54cdbb7a590ee Mon Sep 17 00:00:00 2001 From: Jonathan Wilkes <jon.w.wilkes@gmail.com> Date: Fri, 11 Aug 2017 22:51:30 -0400 Subject: [PATCH] fix invalid reads in iemmatrix --- externals/iem/iemmatrix/src/mtx_bessel.c | 4 ++-- externals/iem/iemmatrix/src/mtx_eig.c | 2 +- externals/iem/iemmatrix/src/mtx_ei~.c | 7 +++++++ externals/iem/iemmatrix/src/mtx_spherical_harmonics.c | 2 +- externals/iem/iemmatrix/src/mtx_spherical_radial.c | 4 ++-- 5 files changed, 13 insertions(+), 6 deletions(-) diff --git a/externals/iem/iemmatrix/src/mtx_bessel.c b/externals/iem/iemmatrix/src/mtx_bessel.c index 458100cc1..8d61c367d 100644 --- a/externals/iem/iemmatrix/src/mtx_bessel.c +++ b/externals/iem/iemmatrix/src/mtx_bessel.c @@ -83,7 +83,7 @@ static void *newMTXBessel (t_symbol *s, int argc, t_atom *argv) x->h_re = 0; x->h_im = 0; x->l=0; - fsym=atom_getsymbol(argv); + fsym= argc ? atom_getsymbol(argv) : &s_; if (fsym->s_name!=0) whichfunction=fsym->s_name[0]; switch (whichfunction) { @@ -96,7 +96,7 @@ static void *newMTXBessel (t_symbol *s, int argc, t_atom *argv) case 'Y': x->list_h_im_out = outlet_new (&x->x_obj, gensym("matrix")); } - nmax=(int) atom_getfloat(argv+1); + nmax= argc > 1 ? (int) atom_getfloat(argv+1) : 0; if (nmax<0) nmax=0; x->nmax=nmax; diff --git a/externals/iem/iemmatrix/src/mtx_eig.c b/externals/iem/iemmatrix/src/mtx_eig.c index 1ab90c96f..e9474f0aa 100644 --- a/externals/iem/iemmatrix/src/mtx_eig.c +++ b/externals/iem/iemmatrix/src/mtx_eig.c @@ -114,7 +114,7 @@ static void *newMTXEig (t_symbol *s, int argc, t_atom *argv) x->list_l_out_re = outlet_new (&x->x_obj, gensym("list")); x->list_l_out_im = outlet_new (&x->x_obj, gensym("list")); - if (atom_getsymbol(argv)==gensym("v")) { + if (argc && atom_getsymbol(argv)==gensym("v")) { x->withevs=1; x->list_q_out_re = outlet_new (&x->x_obj, gensym("matrix")); x->list_q_out_im = outlet_new (&x->x_obj, gensym("matrix")); diff --git a/externals/iem/iemmatrix/src/mtx_ei~.c b/externals/iem/iemmatrix/src/mtx_ei~.c index e461bf269..5f8f7f22b 100755 --- a/externals/iem/iemmatrix/src/mtx_ei~.c +++ b/externals/iem/iemmatrix/src/mtx_ei~.c @@ -22,6 +22,7 @@ void *newMtxEITilde(t_symbol *s, int argc, t_atom *argv) { int sd=1; int sg=1; + t_atom sane_defaults[1]; mtx_ei_tilde *x = (mtx_ei_tilde*) pd_new(mtx_ei_tilde_class); x->sig_in_left=0; x->sig_in_right=0; @@ -32,6 +33,12 @@ void *newMtxEITilde(t_symbol *s, int argc, t_atom *argv) inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal); x->message_outlet=(t_outlet*)outlet_new(&x->x_obj,&s_list); + /* Prevent an invalid read */ + if (!argc) { + SETFLOAT(sane_defaults, 0.); + argv = sane_defaults; + argc = 1; + } if (argc > 2) { sd = atom_getint(argv++); sg = argc-1; diff --git a/externals/iem/iemmatrix/src/mtx_spherical_harmonics.c b/externals/iem/iemmatrix/src/mtx_spherical_harmonics.c index 8ecc9a4b9..72b22bb30 100644 --- a/externals/iem/iemmatrix/src/mtx_spherical_harmonics.c +++ b/externals/iem/iemmatrix/src/mtx_spherical_harmonics.c @@ -83,7 +83,7 @@ static void *newMTXSh (t_symbol *s, int argc, t_atom *argv) x->theta = 0; x->ws = 0; x->l=0; - nmax=(int) atom_getfloat(argv); + nmax= argc ? (int) atom_getfloat(argv) : 0; if (nmax<0) nmax=0; x->nmax=nmax; diff --git a/externals/iem/iemmatrix/src/mtx_spherical_radial.c b/externals/iem/iemmatrix/src/mtx_spherical_radial.c index 9f3fd6d66..703914e10 100644 --- a/externals/iem/iemmatrix/src/mtx_spherical_radial.c +++ b/externals/iem/iemmatrix/src/mtx_spherical_radial.c @@ -80,7 +80,7 @@ static void *newMTXSph (t_symbol *s, int argc, t_atom *argv) x->h_re = 0; x->h_im = 0; x->l=0; - fsym=atom_getsymbol(argv); + fsym= argc ? atom_getsymbol(argv) : &s_; if (fsym->s_name!=0) whichfunction=fsym->s_name[0]; switch (whichfunction) { @@ -93,7 +93,7 @@ static void *newMTXSph (t_symbol *s, int argc, t_atom *argv) case 'y': x->list_h_im_out = outlet_new (&x->x_obj, gensym("matrix")); } - nmax=(int) atom_getfloat(argv+1); + nmax= argc > 1 ? (int) atom_getfloat(argv+1) : 0; if (nmax<0) nmax=0; x->nmax=nmax; -- GitLab