On 11/07/15 17:22, Andreas Cadhalpun wrote:
> On 11.07.2015 11:44, Luca Barbato wrote:
>> On 11/07/15 01:26, Andreas Cadhalpun wrote:
>>> Note however that the explode mode doesn't necessarily work, because e.g.
>>> the avi demuxer doesn't set err_recognition for the AVCodecContext.
>>
>> It wouldn't work as intended, setting the bit_rate to 0 thought, does
>> prevent an issue with g726 but probably that chunk of code could be removed.
>>
>> Some patches following...
>
> After your riff patch, it is possible to the the explode mode working.
> Updated patch attached.
>
@@ -79,6 +79,7 @@ int ff_get_wav_header(AVFormatContext *s, AVIOContext *pb,
AVCodecContext *codec, int size)
{
int id;
+ uint64_t bitrate;
if (size < 14)
return AVERROR_INVALIDDATA;
@@ -87,7 +88,7 @@ int ff_get_wav_header(AVFormatContext *s, AVIOContext *pb,
codec->codec_type = AVMEDIA_TYPE_AUDIO;
codec->channels = avio_rl16(pb);
codec->sample_rate = avio_rl32(pb);
- codec->bit_rate = avio_rl32(pb) * 8;
+ bitrate = avio_rl32(pb) * 8;
codec->block_align = avio_rl16(pb);
if (size == 14) { /* We're dealing with plain vanilla WAVEFORMAT */
codec->bits_per_coded_sample = 8;
@@ -124,6 +125,23 @@ int ff_get_wav_header(AVFormatContext *s,
AVIOContext *pb,
if (size > 0)
avio_skip(pb, size);
}
+
+ if (bitrate > INT_MAX) {
+ if (s->error_recognition & AV_EF_EXPLODE) {
+ av_log(s, AV_LOG_ERROR,
+ "The bitrate %"PRIu64" is too large.\n",
+ bitrate);
+ return AVERROR_INVALIDDATA;
+ } else {
+ av_log(s, AV_LOG_WARNING,
+ "The bitrate %"PRIu64" is too large, resetting to 0.",
+ bitrate);
+ codec->bit_rate = 0;
+ }
+ } else {
+ codec->bit_rate = bitrate;
+ }
+
This is possibly safer, the sample_rate field might enjoy the same
treatment, bonus point for whoever know which is the correct upper bound
for those fields =)
lu
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel