Commit bdab0c2d authored by Peter Ross's avatar Peter Ross Committed by Michael Niedermayer

avformat/mlvdec: process ff_get_wav_header return value

Fixes CID1206640.
Signed-off-by: 's avatarPeter Ross <pross@xvid.org>
Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent c9cfd458
...@@ -123,10 +123,11 @@ static void read_uint64(AVFormatContext *avctx, AVIOContext *pb, const char *tag ...@@ -123,10 +123,11 @@ static void read_uint64(AVFormatContext *avctx, AVIOContext *pb, const char *tag
av_dict_set(&avctx->metadata, tag, value, 0); av_dict_set(&avctx->metadata, tag, value, 0);
} }
static void scan_file(AVFormatContext *avctx, AVStream *vst, AVStream *ast, int file) static int scan_file(AVFormatContext *avctx, AVStream *vst, AVStream *ast, int file)
{ {
MlvContext *mlv = avctx->priv_data; MlvContext *mlv = avctx->priv_data;
AVIOContext *pb = mlv->pb[file]; AVIOContext *pb = mlv->pb[file];
int ret;
while (!url_feof(pb)) { while (!url_feof(pb)) {
int type; int type;
unsigned int size; unsigned int size;
...@@ -151,7 +152,9 @@ static void scan_file(AVFormatContext *avctx, AVStream *vst, AVStream *ast, int ...@@ -151,7 +152,9 @@ static void scan_file(AVFormatContext *avctx, AVStream *vst, AVStream *ast, int
vst->codec->codec_tag = MKTAG('B', 'I', 'T', 16); vst->codec->codec_tag = MKTAG('B', 'I', 'T', 16);
size -= 164; size -= 164;
} else if (ast && type == MKTAG('W', 'A', 'V', 'I') && size >= 16) { } else if (ast && type == MKTAG('W', 'A', 'V', 'I') && size >= 16) {
ff_get_wav_header(pb, ast->codec, 16); ret = ff_get_wav_header(pb, ast->codec, 16);
if (ret < 0)
return ret;
size -= 16; size -= 16;
} else if (type == MKTAG('I','N','F','O')) { } else if (type == MKTAG('I','N','F','O')) {
if (size > 0) if (size > 0)
...@@ -240,6 +243,7 @@ static void scan_file(AVFormatContext *avctx, AVStream *vst, AVStream *ast, int ...@@ -240,6 +243,7 @@ static void scan_file(AVFormatContext *avctx, AVStream *vst, AVStream *ast, int
} }
avio_skip(pb, size); avio_skip(pb, size);
} }
return 0;
} }
static int read_header(AVFormatContext *avctx) static int read_header(AVFormatContext *avctx)
...@@ -247,7 +251,7 @@ static int read_header(AVFormatContext *avctx) ...@@ -247,7 +251,7 @@ static int read_header(AVFormatContext *avctx)
MlvContext *mlv = avctx->priv_data; MlvContext *mlv = avctx->priv_data;
AVIOContext *pb = avctx->pb; AVIOContext *pb = avctx->pb;
AVStream *vst = NULL, *ast = NULL; AVStream *vst = NULL, *ast = NULL;
int size; int size, ret;
uint64_t guid; uint64_t guid;
char guidstr[32]; char guidstr[32];
...@@ -332,7 +336,9 @@ static int read_header(AVFormatContext *avctx) ...@@ -332,7 +336,9 @@ static int read_header(AVFormatContext *avctx)
/* scan primary file */ /* scan primary file */
mlv->pb[100] = avctx->pb; mlv->pb[100] = avctx->pb;
scan_file(avctx, vst, ast, 100); ret = scan_file(avctx, vst, ast, 100);
if (ret < 0)
return ret;
/* scan secondary files */ /* scan secondary files */
if (strlen(avctx->filename) > 2) { if (strlen(avctx->filename) > 2) {
...@@ -351,7 +357,13 @@ static int read_header(AVFormatContext *avctx) ...@@ -351,7 +357,13 @@ static int read_header(AVFormatContext *avctx)
continue; continue;
} }
av_log(avctx, AV_LOG_INFO, "scanning %s\n", filename); av_log(avctx, AV_LOG_INFO, "scanning %s\n", filename);
scan_file(avctx, vst, ast, i); ret = scan_file(avctx, vst, ast, i);
if (ret < 0) {
av_log(avctx, AV_LOG_WARNING, "ignoring %s; %s\n", filename, av_err2str(ret));
avio_close(mlv->pb[i]);
mlv->pb[i] = NULL;
continue;
}
} }
av_free(filename); av_free(filename);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment