rtppassthroughpay: ensure buffer is writable before mapping writable
authorMatthew Waters <matthew@centricular.com>
Thu, 12 Dec 2024 01:05:04 +0000 (12:05 +1100)
committerBackport Bot <gitlab-backport-bot@gstreamer-foundation.org>
Thu, 12 Dec 2024 10:42:34 +0000 (10:42 +0000)
It is entirely possible that the incoming buffer into _chain() is not writable
and will result in a critical when trying to map().

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

subprojects/gst-plugins-good/gst/rtp/gstrtppassthroughpay.c

index 9d97270f62eaae361b0a553ac573c5b2ee7acb9d..693d2708590b0908a9540acff553435782c00958 100644 (file)
  *
  * This elements pass RTP packets along unchanged and appear as a RTP
  * payloader element to the outside world.
- * 
+ *
  * This is useful, for example, in the case where you are receiving RTP
  * packets from a different source and want to serve them over RTSP. Since the
  * gst-rtsp-server library expect the element marked as `payX` to be a RTP
  * payloader element and assumes certain properties are available.
- * 
+ *
  * ## Example pipelines
  *
  * |[
@@ -333,6 +333,8 @@ gst_rtp_passthrough_pay_chain (GstPad * pad,
   GstRTPBuffer rtp_buffer = GST_RTP_BUFFER_INIT;
   guint pt, ssrc, seqnum, timestamp;
 
+  buffer = gst_buffer_make_writable (buffer);
+
   if (!gst_rtp_buffer_map (buffer, GST_MAP_READWRITE, &rtp_buffer)) {
     GST_ERROR_OBJECT (self, "Invalid RTP buffer");
     return gst_pad_push (self->srcpad, buffer);