avcodec/flac_parser: add missed opportunity to check crc

Fixes #9621
pull/388/head
Paul B Mahol 2 years ago
parent 5ca781598e
commit 0912e79376
  1. 18
      libavcodec/flac_parser.c

@ -455,7 +455,7 @@ static int check_header_mismatch(FLACParseContext *fpc,
int log_level_offset)
{
FLACFrameInfo *header_fi = &header->fi, *child_fi = &child->fi;
int deduction, deduction_expected = 0, i;
int check_crc, deduction, deduction_expected = 0, i;
deduction = check_header_fi_mismatch(fpc, header_fi, child_fi,
log_level_offset);
/* Check sample and frame numbers. */
@ -491,8 +491,22 @@ static int check_header_mismatch(FLACParseContext *fpc,
"sample/frame number mismatch in adjacent frames\n");
}
if (fpc->last_fi.is_var_size == header_fi->is_var_size) {
if (fpc->last_fi.is_var_size &&
fpc->last_fi.frame_or_sample_num + fpc->last_fi.blocksize == header_fi->frame_or_sample_num) {
check_crc = 0;
} else if (!fpc->last_fi.is_var_size &&
fpc->last_fi.frame_or_sample_num + 1 == header_fi->frame_or_sample_num) {
check_crc = 0;
} else {
check_crc = !deduction && !deduction_expected;
}
} else {
check_crc = !deduction && !deduction_expected;
}
/* If we have suspicious headers, check the CRC between them */
if (deduction && !deduction_expected) {
if (check_crc || (deduction && !deduction_expected)) {
FLACHeaderMarker *curr;
int read_len;
uint8_t *buf;

Loading…
Cancel
Save