From 0786598f51ce0811cce7a087ba76fa6fd984327e Mon Sep 17 00:00:00 2001 From: wm4 Date: Sun, 2 Mar 2014 22:36:41 +0100 Subject: [PATCH] avformat/microdvd: skip BOM properly The BOM is already skipped in the probe function, but not the header read function. This could cause the header to be misparsed, such as not interpreting the FPS line. --- libavformat/microdvddec.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/libavformat/microdvddec.c b/libavformat/microdvddec.c index 7b49e43976..42c6de0098 100644 --- a/libavformat/microdvddec.c +++ b/libavformat/microdvddec.c @@ -71,22 +71,29 @@ static int get_duration(const char *buf) return -1; } +static const char *bom = "\xEF\xBB\xBF"; + static int microdvd_read_header(AVFormatContext *s) { AVRational pts_info = (AVRational){ 2997, 125 }; /* default: 23.976 fps */ MicroDVDContext *microdvd = s->priv_data; AVStream *st = avformat_new_stream(s, NULL); int i = 0; - char line[MAX_LINESIZE]; + char line_buf[MAX_LINESIZE]; if (!st) return AVERROR(ENOMEM); while (!url_feof(s->pb)) { - char *p = line; + char *p; AVPacket *sub; int64_t pos = avio_tell(s->pb); - int len = ff_get_line(s->pb, line, sizeof(line)); + int len = ff_get_line(s->pb, line_buf, sizeof(line_buf)); + char *line = line_buf; + + if (!strncmp(line, bom, 3)) + line += 3; + p = line; if (!len) break;