[FFmpeg-devel] [PATCH 2/3] avformat/vividas: Check allocation for success
Andreas Rheinhardt
andreas.rheinhardt at gmail.com
Thu Aug 6 12:30:25 EEST 2020
Andreas Rheinhardt:
> Zane van Iperen:
>> On Thu, 6 Aug 2020 01:33:57 +0200
>> "Andreas Rheinhardt" <andreas.rheinhardt at gmail.com> wrote:
>>
>>>
>>> static void load_sb_block(AVFormatContext *s, VividasDemuxContext *viv, unsigned expected_size)
>>> @@ -608,7 +606,7 @@ static int viv_read_header(AVFormatContext *s)
>>> ret = track_index(viv, s, buf, v);
>>> av_free(buf);
>>> if (ret < 0)
>>> - return ret;
>>> + goto fail;
>>>
>>> viv->sb_offset = avio_tell(pb);
>>> if (viv->n_sb_blocks > 0) {
>>> @@ -619,6 +617,9 @@ static int viv_read_header(AVFormatContext *s)
>>> }
>>>
>>> return 0;
>>> +fail:
>>> + av_freep(&viv->sb_blocks);
>>> + return ret;
>>> }
>>
>> Nit: Considering there's only one `goto fail`, wouldn't it be better to
>> just av_freep and return immediately instead?
>>
> This patch is designed so that this demuxer can easily be converted to
> automatically call read_close on read_header failure (see [1] for
> details, in fact all bugs in this patchset have been found when working
> on this goal (I already have 61 demuxers now (17 more to go in
> libavformat plus all the demuxers in libavdevice)). Doing cleanup the
> way I do it here implies that the patch that marks this demuxer as
> compatible with automatic freeing can simply remove the whole fail part
> above and replace "goto fail" with return ret again. But if I cleaned up
> in place, I would have to touch the "if (ret < 0)" line now and either
> unnecessarily touch it again when the cleanup will be made automatic or
> keep the unnecessary {} in "if (ret < 0) {\n return ret;\n}".
>
> - Andreas
>
[1] of course refers to
https://ffmpeg.org/pipermail/ffmpeg-devel/2020-July/266575.html. Forgot
to add it.
- Andreas
More information about the ffmpeg-devel
mailing list