summaryrefslogtreecommitdiffstats
path: root/gst
diff options
context:
space:
mode:
authorMark Nauwelaerts <manauw@skynet.be>2006-06-18 12:37:12 +0000
committerTim-Philipp Müller <tim@centricular.net>2006-06-18 12:37:12 +0000
commitd2eeafad7c5baee2bce62b896d526d673b4c8d67 (patch)
tree610c94365a9206d78548cb532e279f6516d8f505 /gst
parentbf9e04e2db0d26cdd7a4343cd41170dc2c6b0b00 (diff)
gst/wavparse/gstwavparse.c: Make sure we don't read beyond the end of the file (#345232).
Original commit message from CVS: Patch by: Mark Nauwelaerts <manauw at skynet be> * gst/wavparse/gstwavparse.c: (gst_wavparse_perform_seek): Make sure we don't read beyond the end of the file (#345232).
Diffstat (limited to 'gst')
-rw-r--r--gst/wavparse/gstwavparse.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/gst/wavparse/gstwavparse.c b/gst/wavparse/gstwavparse.c
index f67ac377..04cffecf 100644
--- a/gst/wavparse/gstwavparse.c
+++ b/gst/wavparse/gstwavparse.c
@@ -769,10 +769,10 @@ gst_wavparse_perform_seek (GstWavParse * wav, GstEvent * event)
gboolean res;
gdouble rate;
GstEvent *newsegment;
- GstFormat format;
+ GstFormat format, bformat;
GstSeekFlags flags;
GstSeekType cur_type = GST_SEEK_TYPE_NONE, stop_type;
- gint64 cur, stop;
+ gint64 cur, stop, upstream_size;
gboolean flush;
gboolean update;
GstSegment seeksegment;
@@ -843,6 +843,14 @@ gst_wavparse_perform_seek (GstWavParse * wav, GstEvent * event)
} else {
wav->end_offset = wav->datasize + wav->datastart;
}
+
+ /* make sure filesize is not exceeded due to rounding errors or so,
+ * same precaution as in _stream_headers */
+ bformat = GST_FORMAT_BYTES;
+ if (gst_pad_query_peer_duration (wav->sinkpad, &bformat, &upstream_size)) {
+ wav->end_offset = MIN (wav->end_offset, upstream_size);
+ }
+
wav->offset = MIN (wav->offset, wav->end_offset);
wav->dataleft = wav->end_offset - wav->offset;