sdpmessage: Don't set SDP medias from caps without media/payload/clock-rate fields
authorSebastian Dröge <sebastian@centricular.com>
Thu, 30 Jun 2022 06:02:00 +0000 (09:02 +0300)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Thu, 30 Jun 2022 09:28:27 +0000 (09:28 +0000)
Previously it would've silently failed reading the payload/clock-rate
and instead would've used some random value that happened to be on the
stack.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2689>

subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.c

index 9ad2aec..17bb1c3 100644 (file)
@@ -3814,15 +3814,25 @@ gst_sdp_media_set_media_from_caps (const GstCaps * caps, GstSDPMedia * media)
 
   /* get media type and payload for the m= line */
   caps_str = gst_structure_get_string (s, "media");
+  if (!caps_str) {
+    GST_ERROR ("ignoring stream without media type");
+    goto error;
+  }
   gst_sdp_media_set_media (media, caps_str);
 
-  gst_structure_get_int (s, "payload", &caps_pt);
+  if (!gst_structure_get_int (s, "payload", &caps_pt)) {
+    GST_ERROR ("ignoring stream without payload type");
+    goto error;
+  }
   tmp = g_strdup_printf ("%d", caps_pt);
   gst_sdp_media_add_format (media, tmp);
   g_free (tmp);
 
   /* get clock-rate, media type and params for the rtpmap attribute */
-  gst_structure_get_int (s, "clock-rate", &caps_rate);
+  if (!gst_structure_get_int (s, "clock-rate", &caps_rate)) {
+    GST_ERROR ("ignoring stream without payload type");
+    goto error;
+  }
   caps_enc = gst_structure_get_string (s, "encoding-name");
   caps_params = gst_structure_get_string (s, "encoding-params");