summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--gst/wavparse/gstwavparse.c12
2 files changed, 17 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 8f737a1c..b4eafc2c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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;