From 3074fdf5ae174688a24b55888dabaff298b057af Mon Sep 17 00:00:00 2001 From: Florin Apostol Date: Tue, 23 Feb 2016 10:49:40 +0000 Subject: 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 --- ext/dash/gstdashdemux.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/ext/dash/gstdashdemux.c b/ext/dash/gstdashdemux.c index 20d676419..cf41b0311 100644 --- a/ext/dash/gstdashdemux.c +++ b/ext/dash/gstdashdemux.c @@ -1846,15 +1846,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; } -- cgit v1.2.1