mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-28 02:12:28 +00:00
avcodec/ac3_parser: improve false positive detection when parsing sync frames
A two byte sync word is not enough to ensure we got a real syncframe, nor are all the range checks we do in the first seven bytes. Do therefore an integrity check for the sync frame in order to prevent the parser from filling avctx with bogus information. Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
parent
ffb6918783
commit
4c35bb53f9
@ -114,6 +114,10 @@ get_next:
|
||||
buf_size -= hdr.frame_size;
|
||||
continue;
|
||||
}
|
||||
/* Check for false positives since the syncword is not enough.
|
||||
See section 6.1.2 of A/52. */
|
||||
if (av_crc(s->crc_ctx, 0, buf + 2, hdr.frame_size - 2))
|
||||
return i;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -24,6 +24,7 @@
|
||||
#define AVCODEC_AAC_AC3_PARSER_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include "libavutil/crc.h"
|
||||
#include "avcodec.h"
|
||||
#include "parser.h"
|
||||
|
||||
@ -42,6 +43,7 @@ typedef struct AACAC3ParseContext {
|
||||
int header_size;
|
||||
int (*sync)(uint64_t state, int *need_next_header, int *new_frame_start);
|
||||
|
||||
const AVCRC *crc_ctx;
|
||||
int remaining_size;
|
||||
uint64_t state;
|
||||
|
||||
|
@ -246,6 +246,7 @@ static av_cold int ac3_parse_init(AVCodecParserContext *s1)
|
||||
{
|
||||
AACAC3ParseContext *s = s1->priv_data;
|
||||
s->header_size = AC3_HEADER_SIZE;
|
||||
s->crc_ctx = av_crc_get_table(AV_CRC_16_ANSI);
|
||||
s->sync = ac3_sync;
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user