appsrc: Fix use-after-free when making buffer / buffer-lists writable

make_writable can cause a reallocation of the buffer, meaning that obj
would point to an invalid object, both for buffer and for bufferlist.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7803>
This commit is contained in:
Albert Sjolund 2024-10-25 10:38:36 +02:00 committed by GStreamer Marge Bot
parent 6ddd51c239
commit ae6ac2a659

View file

@ -1569,6 +1569,8 @@ gst_app_src_create (GstBaseSrc * bsrc, guint64 offset, guint size,
* instead of outputting it */
if (priv->need_discont_downstream) {
buffer = gst_buffer_make_writable (buffer);
/* In case it reallocates the buffer */
obj = GST_MINI_OBJECT (buffer);
GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
priv->need_discont_downstream = FALSE;
}
@ -1594,6 +1596,8 @@ gst_app_src_create (GstBaseSrc * bsrc, guint64 offset, guint size,
GstBuffer *buffer;
buffer_list = gst_buffer_list_make_writable (buffer_list);
/* In case it reallocates the bufferlist */
obj = GST_MINI_OBJECT (buffer_list);
buffer = gst_buffer_list_get_writable (buffer_list, 0);
GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
priv->need_discont_downstream = FALSE;