From 09989e7c71bb10977a94e5279980d8d2e1512514 Mon Sep 17 00:00:00 2001 From: Mathieu Duponchelle Date: Mon, 10 Mar 2014 22:48:04 +0100 Subject: [PATCH] frei0rfilter: fix memory corruption on sink caps changes. When the input size changed, the frei0r filters didn't take it into account and ended up corrupting memory. Fixes #726069 --- gst/frei0r/gstfrei0rfilter.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/gst/frei0r/gstfrei0rfilter.c b/gst/frei0r/gstfrei0rfilter.c index 85a8bec..0cb15c6 100644 --- a/gst/frei0r/gstfrei0rfilter.c +++ b/gst/frei0r/gstfrei0rfilter.c @@ -40,15 +40,25 @@ gst_frei0r_filter_set_caps (GstBaseTransform * trans, GstCaps * incaps, GstCaps * outcaps) { GstFrei0rFilter *self = GST_FREI0R_FILTER (trans); + GstFrei0rFilterClass *klass = GST_FREI0R_FILTER_GET_CLASS (trans); GstVideoInfo info; + gboolean destroy_f0r_instance = FALSE; gst_video_info_init (&info); if (!gst_video_info_from_caps (&info, incaps)) return FALSE; + if (self->width != info.width || self->height != info.height) + destroy_f0r_instance = TRUE; + self->width = info.width; self->height = info.height; + if (self->f0r_instance && destroy_f0r_instance) { + klass->ftable->destruct (self->f0r_instance); + self->f0r_instance = NULL; + } + return TRUE; } -- 2.7.4