[PATCH v2 1/2] winegstreamer: Fix memory leaks in amt_from_gst_caps_video.

Andrew Eikum aeikum at codeweavers.com
Wed Nov 16 07:02:06 CST 2016


Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>

On Tue, Nov 15, 2016 at 10:41:49PM -0700, Alex Henrie wrote:
> Cc: Andrew Eikum <aeikum at codeweavers.com>
> 
> Signed-off-by: Alex Henrie <alexhenrie24 at gmail.com>
> ---
>  dlls/winegstreamer/gstdemux.c | 15 +++++++++++----
>  1 file changed, 11 insertions(+), 4 deletions(-)
> 
> diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c
> index a6a41ab..892385f 100644
> --- a/dlls/winegstreamer/gstdemux.c
> +++ b/dlls/winegstreamer/gstdemux.c
> @@ -179,18 +179,21 @@ static gboolean amt_from_gst_caps_audio(GstCaps *caps, AM_MEDIA_TYPE *amt)
>  
>  static gboolean amt_from_gst_caps_video(GstCaps *caps, AM_MEDIA_TYPE *amt)
>  {
> -    VIDEOINFOHEADER *vih = CoTaskMemAlloc(sizeof(*vih));
> -    BITMAPINFOHEADER *bih = &vih->bmiHeader;
> +    VIDEOINFOHEADER *vih;
> +    BITMAPINFOHEADER *bih;
>      gint32 width = 0, height = 0, nom = 0, denom = 0;
>      GstVideoInfo vinfo;
>  
>      if (!gst_video_info_from_caps (&vinfo, caps))
>          return FALSE;
>      width = vinfo.width;
>      height = vinfo.height;
>      nom = vinfo.fps_n;
>      denom = vinfo.fps_d;
>  
> +    vih = CoTaskMemAlloc(sizeof(*vih));
> +    bih = &vih->bmiHeader;
> +
>      amt->formattype = FORMAT_VideoInfo;
>      amt->pbFormat = (BYTE*)vih;
>      amt->cbFormat = sizeof(*vih);
> @@ -207,13 +210,16 @@ static gboolean amt_from_gst_caps_video(GstCaps *caps, AM_MEDIA_TYPE *amt)
>              case 32: amt->subtype = MEDIASUBTYPE_RGB32; break;
>              default:
>                  FIXME("Unknown bpp %u\n", bih->biBitCount);
> +                CoTaskMemFree(vih);
>                  return FALSE;
>          }
>          bih->biCompression = BI_RGB;
>      } else {
>          amt->subtype = MEDIATYPE_Video;
> -        if (!(amt->subtype.Data1 = gst_video_format_to_fourcc(vinfo.finfo->format)))
> +        if (!(amt->subtype.Data1 = gst_video_format_to_fourcc(vinfo.finfo->format))) {
> +            CoTaskMemFree(vih);
>              return FALSE;
> +        }
>          switch (amt->subtype.Data1) {
>              case mmioFOURCC('I','4','2','0'):
>              case mmioFOURCC('Y','V','1','2'):
> @@ -269,7 +275,8 @@ static gboolean accept_caps_sink(GstPad *pad, GstCaps *caps)
>              return FALSE;
>          }
>          ret = amt_from_gst_caps_video(caps, &amt);
> -        FreeMediaType(&amt);
> +        if (ret)
> +            FreeMediaType(&amt);
>          TRACE("-%i\n", ret);
>          return ret;
>      } else {
> -- 
> 2.10.2
> 



More information about the wine-patches mailing list