diff options
author | Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> | 2009-04-30 10:17:23 +0200 |
---|---|---|
committer | Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> | 2009-05-04 17:01:20 +0200 |
commit | 20c7be5741bfd39e2d2cbe647522b99bd339e101 (patch) | |
tree | 70c244f8beff6fa8bc58d071e45477b1e6228da2 /gst/rtsp/gstrtspsrc.c | |
parent | 56656dd03d28f4882bb99c4abcb2035ff880f8c5 (diff) |
rtspsrc: sanity checks on range info
A max range that overflows should not be trusted,
nor should a max range that equals the min range.
Fixes #580851.(a).
Diffstat (limited to 'gst/rtsp/gstrtspsrc.c')
-rw-r--r-- | gst/rtsp/gstrtspsrc.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/gst/rtsp/gstrtspsrc.c b/gst/rtsp/gstrtspsrc.c index 7699faf8..4d786de5 100644 --- a/gst/rtsp/gstrtspsrc.c +++ b/gst/rtsp/gstrtspsrc.c @@ -4389,6 +4389,17 @@ gst_rtspsrc_parse_range (GstRTSPSrc * src, const gchar * range, GST_DEBUG_OBJECT (src, "range: max %" GST_TIME_FORMAT, GST_TIME_ARGS (seconds)); + /* live (WMS) server might send overflowed large max as its idea of infinity, + * compensate to prevent problems later on */ + if (seconds != -1 && seconds < 0) { + seconds = -1; + GST_DEBUG_OBJECT (src, "insane range, set to NONE"); + } + + /* live (WMS) might send min == max, which is not worth recording */ + if (segment->duration == -1 && seconds == segment->start) + seconds = -1; + /* don't change duration with unknown value, we might have a valid value * there that we want to keep. */ if (seconds != -1) |