wasapi: Fix alloc/free function mismatch
authorSeungha Yang <seungha@centricular.com>
Wed, 21 Feb 2024 12:50:20 +0000 (21:50 +0900)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Wed, 21 Feb 2024 21:03:32 +0000 (21:03 +0000)
... and fix leak in wasapi device provider

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3326
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6169>

subprojects/gst-plugins-bad/sys/wasapi/gstwasapiutil.c

index 8f935837eeac83947968e84aba6682f22e7b8cf2..3fd15a0b00ce2648bc90f356bd9cd51d068f6862 100644 (file)
@@ -407,6 +407,7 @@ gst_wasapi_util_get_devices (GstMMDeviceEnumerator * self,
     GstDevice *device;
     GstStructure *props;
     GstCaps *caps;
+    gboolean parse_ret;
 
     hr = IMMDeviceCollection_Item (device_collection, ii, &item);
     if (hr != S_OK)
@@ -469,8 +470,12 @@ gst_wasapi_util_get_devices (GstMMDeviceEnumerator * self,
       goto next;
     }
 
-    if (!gst_wasapi_util_parse_waveformatex ((WAVEFORMATEXTENSIBLE *) format,
-            gst_static_caps_get (&scaps), &caps, NULL))
+    parse_ret =
+        gst_wasapi_util_parse_waveformatex ((WAVEFORMATEXTENSIBLE *) format,
+        gst_static_caps_get (&scaps), &caps, NULL);
+    CoTaskMemFree (format);
+
+    if (!parse_ret)
       goto next;
 
     /* Set some useful properties */
@@ -556,7 +561,7 @@ gst_wasapi_util_get_device_format (GstElement * self,
       return FALSE;
     }
 
-    format = malloc (var.blob.cbSize);
+    format = CoTaskMemAlloc (var.blob.cbSize);
     memcpy (format, var.blob.pBlobData, var.blob.cbSize);
 
     PropVariantClear (&var);
@@ -570,7 +575,7 @@ gst_wasapi_util_get_device_format (GstElement * self,
     goto out;
 
   GST_ERROR_OBJECT (self, "AudioEngine DeviceFormat not supported");
-  free (format);
+  CoTaskMemFree (format);
   return FALSE;
 
 out: