summaryrefslogtreecommitdiffstats
path: root/gst/wavparse/gstwavparse.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@gnome.org>2003-05-17 16:09:59 +0000
committerBenjamin Otte <otte@gnome.org>2003-05-17 16:09:59 +0000
commit8e3c67b6df520625e20d1faebd4c6015525aed0e (patch)
tree0434793ca05cb4b65c2862c16bf71a4f4af63605 /gst/wavparse/gstwavparse.c
parent01d4e568c663c5b229d1f26a07391492e3e9b032 (diff)
make wavparse not segfault when somebody puts data at the end of the file
Original commit message from CVS: make wavparse not segfault when somebody puts data at the end of the file
Diffstat (limited to 'gst/wavparse/gstwavparse.c')
-rw-r--r--gst/wavparse/gstwavparse.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/gst/wavparse/gstwavparse.c b/gst/wavparse/gstwavparse.c
index 47884944..3dcfacf3 100644
--- a/gst/wavparse/gstwavparse.c
+++ b/gst/wavparse/gstwavparse.c
@@ -243,8 +243,10 @@ gst_wavparse_chain (GstPad *pad, GstBuffer *buf)
/* we can't go beyond the max length */
maxsize = wavparse->riff_nextlikely - GST_BUFFER_OFFSET (buf);
- /* if we're expected to see a new chunk in this buffer */
- if (maxsize < size) {
+ if (maxsize == 0) {
+ return;
+ } else if (maxsize < size) {
+ /* if we're expected to see a new chunk in this buffer */
GstBuffer *newbuf;
newbuf = gst_buffer_create_sub (buf, 0, maxsize);
@@ -267,7 +269,7 @@ gst_wavparse_chain (GstPad *pad, GstBuffer *buf)
&GST_BUFFER_TIMESTAMP (buf));
if (wavparse->need_discont) {
- if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
+ if (buf && GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
gst_pad_push (wavparse->srcpad,
GST_BUFFER (gst_event_new_discontinuous (FALSE,
GST_FORMAT_BYTES, wavparse->offset,
@@ -282,9 +284,9 @@ gst_wavparse_chain (GstPad *pad, GstBuffer *buf)
wavparse->need_discont = FALSE;
}
gst_pad_push (wavparse->srcpad, buf);
- }
- else
+ } else {
gst_buffer_unref (buf);
+ }
wavparse->offset += size;