bitwriter: Fix a memory leak in reset_and_get_buffer.

We should record the ownership of the data before we reset the bitwriter.
Or we will always dup the buffer data and leak the memory.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/886>
This commit is contained in:
He Junyan 2021-09-19 22:39:09 +08:00
parent 81cf9754e3
commit 25dbae6e73

View file

@ -225,15 +225,18 @@ gst_bit_writer_reset_and_get_buffer (GstBitWriter * bitwriter)
GstBuffer *buffer;
gpointer data;
gsize size;
gboolean owned;
g_return_val_if_fail (bitwriter != NULL, NULL);
owned = bitwriter->owned;
size = GST_ROUND_UP_8 (bitwriter->bit_size) >> 3;
data = gst_bit_writer_reset_and_get_data (bitwriter);
/* we cannot rely on buffers allocated externally, thus let's dup
* the data */
if (data && !bitwriter->owned)
if (data && !owned)
data = g_memdup2 (data, size);
buffer = gst_buffer_new ();