|
|
|
@ -103,7 +103,8 @@ static int unpack_parse_unit(DiracParseUnit *pu, DiracParseContext *pc, |
|
|
|
|
int i; |
|
|
|
|
int8_t *start; |
|
|
|
|
static const uint8_t valid_pu_types[] = { |
|
|
|
|
0x00, 0x10, 0x20, 0x30, 0x08, 0x48, 0xC8, 0xE8, 0x0A, 0x0C, 0x0D, 0x0E |
|
|
|
|
0x00, 0x10, 0x20, 0x30, 0x08, 0x48, 0xC8, 0xE8, 0x0A, 0x0C, 0x0D, 0x0E, |
|
|
|
|
0x4C, 0x09, 0xCC, 0x88, 0xCB |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
if (offset < 0 || pc->index - 13 < offset) |
|
|
|
@ -116,13 +117,13 @@ static int unpack_parse_unit(DiracParseUnit *pu, DiracParseContext *pc, |
|
|
|
|
pu->prev_pu_offset = AV_RB32(start + 9); |
|
|
|
|
|
|
|
|
|
/* Check for valid parse code */ |
|
|
|
|
for (i = 0; i < 12; i++) |
|
|
|
|
for (i = 0; i < 17; i++) |
|
|
|
|
if (valid_pu_types[i] == pu->pu_type) |
|
|
|
|
break; |
|
|
|
|
if (i == 12) |
|
|
|
|
if (i == 17) |
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
if (pu->pu_type == 0x10 && pu->next_pu_offset == 0) |
|
|
|
|
if (pu->pu_type == 0x10 && pu->next_pu_offset == 0x00) |
|
|
|
|
pu->next_pu_offset = 13; /* The length of a parse info header */ |
|
|
|
|
|
|
|
|
|
/* Check if the parse offsets are somewhat sane */ |
|
|
|
|