dashdemux: correctly handle an HTTP-XSDATE that is exactly the size of the date string

The code in the gst_dash_demux_parse_http_xsdate() was trying to
handle the case where the string is not null terminated by resizing
the buffer and appending a zero byte. This does not work if the buffer
is exactly the length of the string because the gst_buffer_resize()
function does not re-allocate the buffer, it just changes its size.

If a buffer is passed to gst_dash_demux_parse_http_xsdate() that is
exactly the length of the string, the function fails with an assert
failure in gst_buffer_resize().

https://bugzilla.gnome.org/show_bug.cgi?id=762148
This commit is contained in:
Florin Apostol 2016-02-23 10:49:40 +00:00 committed by Sebastian Dröge
parent c0e930c26f
commit 72e46a4478

View file

@ -1992,15 +1992,17 @@ static GstDateTime *
gst_dash_demux_parse_http_xsdate (GstDashDemuxClockDrift * clock_drift,
GstBuffer * buffer)
{
GstDateTime *value;
GstDateTime *value = NULL;
GstMapInfo mapinfo;
/* the string from the server might not be zero terminated */
gst_buffer_resize (buffer, 0, gst_buffer_get_size (buffer) + 1);
gst_buffer_map (buffer, &mapinfo, GST_MAP_READ | GST_MAP_WRITE);
mapinfo.data[mapinfo.size - 1] = '\0';
value = gst_date_time_new_from_iso8601_string ((const gchar *) mapinfo.data);
gst_buffer_unmap (buffer, &mapinfo);
if (gst_buffer_map (buffer, &mapinfo, GST_MAP_READ)) {
gchar *str;
str = g_strndup ((const gchar *) mapinfo.data, mapinfo.size);
gst_buffer_unmap (buffer, &mapinfo);
value = gst_date_time_new_from_iso8601_string (str);
g_free (str);
}
return value;
}