diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | gst/wavparse/gstwavparse.c | 12 |
2 files changed, 17 insertions, 2 deletions
@@ -1,3 +1,10 @@ +2006-06-18 Tim-Philipp Müller <tim at centricular dot net> + + 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). + 2006-06-17 Tim-Philipp Müller <tim at centricular dot net> * configure.ac: 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; |