tsbase: Fix parsing of PSI table IDs

(Ported from mpegtsdemux d8fd874f52)
This commit is contained in:
Thibault Saunier 2012-02-24 19:08:40 -03:00
parent f977d7e743
commit 336710d355

View file

@ -680,7 +680,7 @@ gboolean
mpegts_base_is_psi (MpegTSBase * base, MpegTSPacketizerPacket * packet) mpegts_base_is_psi (MpegTSBase * base, MpegTSPacketizerPacket * packet)
{ {
gboolean retval = FALSE; gboolean retval = FALSE;
guint8 table_id; guint8 *data, table_id, pointer;
int i; int i;
static const guint8 si_tables[] = static const guint8 si_tables[] =
{ 0x00, 0x01, 0x02, 0x03, 0x40, 0x41, 0x42, 0x46, 0x4A, { 0x00, 0x01, 0x02, 0x03, 0x40, 0x41, 0x42, 0x46, 0x4A,
@ -699,6 +699,18 @@ mpegts_base_is_psi (MpegTSBase * base, MpegTSPacketizerPacket * packet)
if (!retval) { if (!retval) {
if (packet->payload_unit_start_indicator) { if (packet->payload_unit_start_indicator) {
data = packet->data;
pointer = *data++;
data += pointer;
/* 'pointer' value may be invalid on malformed packet
* so we need to avoid out of range
*/
if (!(data < packet->data_end)) {
GST_WARNING_OBJECT (base,
"Wrong offset when retrieving table id: 0x%x", pointer);
return FALSE;
}
table_id = *(packet->data); table_id = *(packet->data);
i = 0; i = 0;
while (si_tables[i] != TABLE_ID_UNSET) { while (si_tables[i] != TABLE_ID_UNSET) {