diff --git a/ext/ogg/gstoggdemux.c b/ext/ogg/gstoggdemux.c index fcb0337486..e600b3d6de 100644 --- a/ext/ogg/gstoggdemux.c +++ b/ext/ogg/gstoggdemux.c @@ -778,7 +778,9 @@ gst_ogg_demux_chain_peer (GstOggPad * pad, ogg_packet * packet, pad->prev_granule = pad->current_granule; } - if (pad->map.is_ogm_text) { + if (G_UNLIKELY (offset + trim > packet->bytes)) + goto invalid_packet; + else if (pad->map.is_ogm_text) { /* check for invalid buffer sizes */ if (G_UNLIKELY (offset + trim >= packet->bytes)) goto empty_packet; @@ -901,6 +903,12 @@ empty_packet: goto done; } +invalid_packet: + { + GST_DEBUG_OBJECT (ogg, "Skipping invalid packet"); + goto done; + } + no_timestamp: { GST_DEBUG_OBJECT (ogg, "skipping packet: no valid granule found yet");