[FFmpeg-devel] [libav-devel] [PATCH] riffdec: error out on negative bit rate
Andreas Cadhalpun
andreas.cadhalpun at googlemail.com
Sat Jul 11 18:18:36 CEST 2015
On 11.07.2015 18:13, Luca Barbato wrote:
> 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 =)
That's fine as well (and avoids said undefined integer overflow).
Best regards,
Andreas
More information about the ffmpeg-devel
mailing list