From d2eeafad7c5baee2bce62b896d526d673b4c8d67 Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Sun, 18 Jun 2006 12:37:12 +0000 Subject: 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 * gst/wavparse/gstwavparse.c: (gst_wavparse_perform_seek): Make sure we don't read beyond the end of the file (#345232). --- gst/wavparse/gstwavparse.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'gst') 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; -- cgit