monoscope: stack needs to be size+1 as we put a end-marker into it
authorStefan Kost <ensonic@users.sf.net>
Wed, 2 Mar 2011 08:56:33 +0000 (10:56 +0200)
committerStefan Kost <ensonic@users.sf.net>
Wed, 2 Mar 2011 08:56:33 +0000 (10:56 +0200)
Valgrind is still complaining about one bad read, but this takes care of the
crash mentioned in the comment and in bug #564122.

gst/monoscope/convolve.c

index 070baa4..584f680 100644 (file)
@@ -90,7 +90,7 @@ struct _struct_convolve_state
   double left[CONVOLVE_BIG];
   double right[CONVOLVE_SMALL * 3];
   double scratch[CONVOLVE_SMALL * 3];
-  stack_entry stack[STACK_SIZE];
+  stack_entry stack[STACK_SIZE + 1];
 };
 
 /*
@@ -102,7 +102,7 @@ struct _struct_convolve_state
 convolve_state *
 convolve_init (void)
 {
-  return (convolve_state *) malloc (sizeof (convolve_state));
+  return (convolve_state *) calloc (1, sizeof (convolve_state));
 }
 
 /*
@@ -111,8 +111,7 @@ convolve_init (void)
 void
 convolve_close (convolve_state * state)
 {
-  if (state)
-    free (state);
+  free (state);
 }
 
 static void
@@ -267,7 +266,7 @@ convolve_match (const int *lastchoice,
   double *left = state->left;
   double *right = state->right;
   double *scratch = state->scratch;
-  stack_entry *top = state->stack + STACK_SIZE - 1;
+  stack_entry *top = state->stack + (STACK_SIZE - 1);
 
 #if 1
   for (i = 0; i < 512; i++)
@@ -288,9 +287,7 @@ convolve_match (const int *lastchoice,
   for (i = 0; i < 256; i++)
     right[i] -= avg;
   /* End-of-stack marker. */
-#if     0                       /* The following line produces a CRASH, need to figure out why?!! */
   top[1].b.null = scratch;
-#endif
   top[1].b.main = NULL;
   /* The low 256x256, of which we want the high 256 outputs. */
   top->v.left = left;