From c994d97950e234a9da0fa599a662ab5287ec0889 Mon Sep 17 00:00:00 2001
From: Jonathan Wilkes <jon.w.wilkes@gmail.com>
Date: Wed, 18 Sep 2019 22:42:34 -0400
Subject: [PATCH] quick fixes to keep cxc/mean~ from crashing when dsp is
 turned on

---
 externals/cxc/mean~.c | 38 +++++++++++++++++++++++++++++++++-----
 1 file changed, 33 insertions(+), 5 deletions(-)

diff --git a/externals/cxc/mean~.c b/externals/cxc/mean~.c
index cc17df4e6..b4e79b1b2 100644
--- a/externals/cxc/mean~.c
+++ b/externals/cxc/mean~.c
@@ -67,9 +67,16 @@ static void cxmean_mean(t_cxmean *x)
 
   cnt = 0;
   if(!(a = (t_garray *)pd_findbyclass(x->x_arrayname,garray_class))) {
-    pd_error(x, "%s: no such table", x->x_arrayname->s_name);
+    pd_error(x, "mean: %s: no such table", x->x_arrayname->s_name);
+    x->x_vec = 0;
+    return;
+  }
+  else if (!garray_getfloatarray(a,&x->x_nsampsintab,&x->x_vec))
+  {
+    error("%s: bad template for mean", x->x_arrayname->s_name);
+    x->x_vec = 0;
+    return;
   }
-  garray_getfloatarray(a,&x->x_nsampsintab,&x->x_vec);
 
   fp = x->x_vec;
 
@@ -168,8 +175,15 @@ static void cxavgdev_float(t_cxavgdev *x, t_float f)
   cnt = 0;
   if(!(a = (t_garray *)pd_findbyclass(x->x_arrayname,garray_class))) {
     pd_error(x, "%s: no such table", x->x_arrayname->s_name);
+    x->x_vec = 0;
+    return;
+  }
+  else if (!garray_getfloatarray(a,&x->x_nsampsintab,&x->x_vec))
+  {
+    error("%s: bad template for mean", x->x_arrayname->s_name);
+    x->x_vec = 0;
+    return;
   }
-  garray_getfloatarray(a,&x->x_nsampsintab,&x->x_vec);
 
   fp = x->x_vec;
 
@@ -347,6 +361,14 @@ static t_int *mean_tilde_perform(t_int *w)
   int n = (int)(w[2]);
   t_float xz = 0.;
   fp = x->x_vec;
+
+  /* If array doesn't exist just make it zero */
+  if (!fp)
+  {
+    x->x_mean = 0;
+    return (w+3);
+  }
+
   while(n--) {
     xz += abs(*fp++);
     //post("cxc/mean.c: %d : %f : %f",n,xz,fp);
@@ -354,7 +376,6 @@ static t_int *mean_tilde_perform(t_int *w)
   x->x_mean = (t_float)(xz / n);
   //post("cxc/mean.c: %f",xz);
   return (w+3);
-  //return 0;
 }
 
 static void mean_tilde_set(t_mean_tilde *x, t_symbol *s)
@@ -400,8 +421,15 @@ static void mean_tilde_mean(t_mean_tilde *x)
   cnt = 0;
   if(!(a = (t_garray *)pd_findbyclass(x->x_arrayname,garray_class))) {
     pd_error(x, "%s: no such table", x->x_arrayname->s_name);
+    x->x_vec = 0;
+    return;
+  }
+  else if (!garray_getfloatarray(a,&x->x_nsampsintab,&x->x_vec))
+  {
+    error("%s: bad template for mean", x->x_arrayname->s_name);
+    x->x_vec = 0;
+    return;
   }
-  garray_getfloatarray(a,&x->x_nsampsintab,&x->x_vec);
 
   fp = x->x_vec;
 
-- 
GitLab