gst-libs/gst/riff/riff-read.c: fix infinite loop in wavparse, fixes bug

Original commit message from CVS:
2004-08-24  Sebastien Cote  <sc5@hermes.usherb.ca>

* gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head),
(gst_riff_read_element_data), (gst_riff_read_seek),
(gst_riff_read_skip): fix infinite loop in wavparse, fixes bug
#144616, patch reviewed by Ronald and committed by Christophe Fergeau
<teuf@gnome.org>
This commit is contained in:
Christophe Fergeau 2004-08-24 18:25:02 +00:00
parent b57c33450e
commit a2159103cb
2 changed files with 17 additions and 5 deletions

View file

@ -1,3 +1,11 @@
2004-08-24 Sebastien Cote <sc5@hermes.usherb.ca>
* gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head),
(gst_riff_read_element_data), (gst_riff_read_seek),
(gst_riff_read_skip): fix infinite loop in wavparse, fixes bug
#144616, patch reviewed by Ronald and committed by Christophe Fergeau
<teuf@gnome.org>
2004-08-23 Iain <iaingnome@gmail.com> 2004-08-23 Iain <iaingnome@gmail.com>
* ext/mad/gstid3tag.c (gst_mad_id3_to_tag_list): Special case COMM * ext/mad/gstid3tag.c (gst_mad_id3_to_tag_list): Special case COMM

View file

@ -179,7 +179,7 @@ gst_riff_peek_head (GstRiffRead * riff,
/* Here, we might encounter EOS */ /* Here, we might encounter EOS */
gst_bytestream_get_status (riff->bs, &remaining, &event); gst_bytestream_get_status (riff->bs, &remaining, &event);
if (GST_IS_EVENT (event)) { if (event && GST_IS_EVENT (event)) {
gboolean eos = (GST_EVENT_TYPE (event) == GST_EVENT_EOS); gboolean eos = (GST_EVENT_TYPE (event) == GST_EVENT_EOS);
gst_pad_event_default (riff->sinkpad, event); gst_pad_event_default (riff->sinkpad, event);
@ -220,7 +220,7 @@ gst_riff_read_element_data (GstRiffRead * riff, guint length, guint * got_bytes)
guint32 remaining; guint32 remaining;
gst_bytestream_get_status (riff->bs, &remaining, &event); gst_bytestream_get_status (riff->bs, &remaining, &event);
if (GST_IS_EVENT (event)) { if (event && GST_IS_EVENT (event)) {
gst_pad_event_default (riff->sinkpad, event); gst_pad_event_default (riff->sinkpad, event);
if (GST_EVENT_TYPE (event) == GST_EVENT_EOS) { if (GST_EVENT_TYPE (event) == GST_EVENT_EOS) {
@ -276,8 +276,8 @@ gst_riff_read_seek (GstRiffRead * riff, guint64 offset)
gst_bytestream_get_status (riff->bs, &remaining, &event); gst_bytestream_get_status (riff->bs, &remaining, &event);
if (event) { if (event) {
g_warning ("Unexpected event before seek"); g_warning ("Unexpected event before seek");
gst_event_unref (event);
} }
if (remaining) if (remaining)
gst_bytestream_flush_fast (riff->bs, remaining); gst_bytestream_flush_fast (riff->bs, remaining);
@ -376,9 +376,13 @@ gst_riff_read_skip (GstRiffRead * riff)
/* see if we have that much data available */ /* see if we have that much data available */
gst_bytestream_get_status (riff->bs, &remaining, &event); gst_bytestream_get_status (riff->bs, &remaining, &event);
if (event) { if (event && GST_IS_EVENT (event)) {
gboolean eos = (GST_EVENT_TYPE (event) == GST_EVENT_EOS);
g_warning ("Unexpected event in skip"); g_warning ("Unexpected event in skip");
gst_event_unref (event); gst_pad_event_default (riff->sinkpad, event);
if (eos)
return FALSE;
} }
/* yes */ /* yes */