From d2eeafad7c5baee2bce62b896d526d673b4c8d67 Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Sun, 18 Jun 2006 12:37:12 +0000 Subject: [PATCH] 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). --- ChangeLog | 7 +++++++ gst/wavparse/gstwavparse.c | 12 ++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8f737a1cac..b4eafc2cd8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2006-06-18 Tim-Philipp Müller + + 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). + 2006-06-17 Tim-Philipp Müller * configure.ac: diff --git a/gst/wavparse/gstwavparse.c b/gst/wavparse/gstwavparse.c index f67ac377b7..04cffecfe0 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;