diff options
author | Mark Nauwelaerts <manauw@skynet.be> | 2006-06-18 12:37:12 +0000 |
---|---|---|
committer | Tim-Philipp Müller <tim@centricular.net> | 2006-06-18 12:37:12 +0000 |
commit | d2eeafad7c5baee2bce62b896d526d673b4c8d67 (patch) | |
tree | 610c94365a9206d78548cb532e279f6516d8f505 /gst | |
parent | bf9e04e2db0d26cdd7a4343cd41170dc2c6b0b00 (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.c | 12 |
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; |