summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorin Apostol <florin.apostol@oregan.net>2016-02-23 10:49:40 +0000
committerTim-Philipp Müller <tim@centricular.com>2016-04-06 14:17:57 +0100
commit3074fdf5ae174688a24b55888dabaff298b057af (patch)
tree53e185d263f34b76fadb371a9bb00f66b8f1f08b
parent3243c6a47e57b240a2cee39447188e249fb56947 (diff)
downloadgstreamer-plugins-bad-3074fdf5ae174688a24b55888dabaff298b057af.tar.gz
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
-rw-r--r--ext/dash/gstdashdemux.c14
1 files 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;
}