summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>2009-04-30 10:17:23 +0200
committerMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>2009-05-04 17:01:20 +0200
commit20c7be5741bfd39e2d2cbe647522b99bd339e101 (patch)
tree70c244f8beff6fa8bc58d071e45477b1e6228da2
parent56656dd03d28f4882bb99c4abcb2035ff880f8c5 (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).
-rw-r--r--gst/rtsp/gstrtspsrc.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/gst/rtsp/gstrtspsrc.c b/gst/rtsp/gstrtspsrc.c
index 7699faf89..4d786de59 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)