X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fxwma.c;h=f4ff8157f84e674ce75c5e9de3670c5f7dd9fb69;hb=0300962b76644f145b773439989a5cdf1667e162;hp=13ce2bb9f967d6267db4dd244c974c481436b9c9;hpb=a4472ac01e86f9fae5adb9034f2777b86a9c5480;p=ffmpeg diff --git a/libavformat/xwma.c b/libavformat/xwma.c index 13ce2bb9f96..f4ff8157f84 100644 --- a/libavformat/xwma.c +++ b/libavformat/xwma.c @@ -85,7 +85,7 @@ static int xwma_read_header(AVFormatContext *s) * anyway. */ if (st->codec->codec_id != AV_CODEC_ID_WMAV2) { - av_log_ask_for_sample(s, "unexpected codec (tag 0x04%x; id %d)\n", + avpriv_request_sample(s, "Unexpected codec (tag 0x04%x; id %d)", st->codec->codec_tag, st->codec->codec_id); } else { /* In all xWMA files I have seen, there is no extradata. But the WMA @@ -100,7 +100,7 @@ static int xwma_read_header(AVFormatContext *s) * if it will work, but just go on and try it, after asking * the user for a sample. */ - av_log_ask_for_sample(s, "unexpected extradata (%d bytes)\n", + avpriv_request_sample(s, "Unexpected extradata (%d bytes)", st->codec->extradata_size); } else { st->codec->extradata_size = 6; @@ -198,6 +198,14 @@ static int xwma_read_header(AVFormatContext *s) /* Estimate the duration from the total number of output bytes. */ const uint64_t total_decoded_bytes = dpds_table[dpds_table_size - 1]; + + if (!bytes_per_sample) { + av_log(s, AV_LOG_ERROR, + "Invalid bits_per_coded_sample %d for %d channels\n", + st->codec->bits_per_coded_sample, st->codec->channels); + return AVERROR_INVALIDDATA; + } + st->duration = total_decoded_bytes / bytes_per_sample; /* Use the dpds data to build a seek table. We can only do this after