avidemux: ensure 0-padding when correcting dubious list size

This commit is contained in:
Mark Nauwelaerts 2011-05-18 12:52:31 +02:00
parent ee8aef2901
commit 4cd2dac1da

View File

@ -1893,14 +1893,16 @@ gst_avi_demux_expose_streams (GstAviDemux * avi, gboolean force)
static inline void static inline void
gst_avi_demux_roundup_list (GstAviDemux * avi, GstBuffer ** buf) gst_avi_demux_roundup_list (GstAviDemux * avi, GstBuffer ** buf)
{ {
if (G_UNLIKELY (GST_BUFFER_SIZE (*buf) & 1)) { gint size = GST_BUFFER_SIZE (*buf);
if (G_UNLIKELY (size & 1)) {
GstBuffer *obuf; GstBuffer *obuf;
GST_DEBUG_OBJECT (avi, "rounding up dubious list size %d", GST_DEBUG_OBJECT (avi, "rounding up dubious list size %d", size);
GST_BUFFER_SIZE (*buf)); obuf = gst_buffer_new_and_alloc (size + 1);
obuf = gst_buffer_new_and_alloc (GST_BUFFER_SIZE (*buf) + 1); memcpy (GST_BUFFER_DATA (obuf), GST_BUFFER_DATA (*buf), size);
memcpy (GST_BUFFER_DATA (obuf), GST_BUFFER_DATA (*buf), /* assume 0 padding, at least makes outcome deterministic */
GST_BUFFER_SIZE (*buf)); (GST_BUFFER_DATA (obuf))[size] = 0;
gst_buffer_replace (buf, obuf); gst_buffer_replace (buf, obuf);
} }
} }