gst-plugins-good: monoscope: stack needs to be size+1 as we put a end-marker into it

Stefan Kost ensonic at kemper.freedesktop.org
Wed Mar 2 00:55:28 PST 2011


Module: gst-plugins-good
Branch: master
Commit: d2ee8b979d84f0e714e502116b6fafd9f1d68d16
URL:    http://cgit.freedesktop.org/gstreamer/gst-plugins-good/commit/?id=d2ee8b979d84f0e714e502116b6fafd9f1d68d16

Author: Stefan Kost <ensonic at users.sf.net>
Date:   Wed Mar  2 10:56:33 2011 +0200

monoscope: stack needs to be size+1 as we put a end-marker into it

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 |   11 ++++-------
 1 files changed, 4 insertions(+), 7 deletions(-)

diff --git a/gst/monoscope/convolve.c b/gst/monoscope/convolve.c
index 070baa4..584f680 100644
--- a/gst/monoscope/convolve.c
+++ b/gst/monoscope/convolve.c
@@ -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;



More information about the gstreamer-commits mailing list