forked from FFmpeg/FFmpeg
lavfi: check refcount before merging.
When merging the formats around the automatically inserted convert filters, the refcount of the format lists can not be 0. Coverity does not detect it, and suspects a memory leak, because if refcount is 0 the newly allocated lists are not stored anywhere. That gives CIDs 1224282, 1224283 and 1224284. Lists with refcount 0 are used in can_merge_formats(), so the asserts can not be moved inside the merge functions.
This commit is contained in:
parent
1d12df1ad7
commit
099aff5c42
1 changed files with 14 additions and 0 deletions
|
@ -562,6 +562,20 @@ static int query_formats(AVFilterGraph *graph, AVClass *log_ctx)
|
||||||
filter_query_formats(convert);
|
filter_query_formats(convert);
|
||||||
inlink = convert->inputs[0];
|
inlink = convert->inputs[0];
|
||||||
outlink = convert->outputs[0];
|
outlink = convert->outputs[0];
|
||||||
|
av_assert0( inlink-> in_formats->refcount > 0);
|
||||||
|
av_assert0( inlink->out_formats->refcount > 0);
|
||||||
|
av_assert0(outlink-> in_formats->refcount > 0);
|
||||||
|
av_assert0(outlink->out_formats->refcount > 0);
|
||||||
|
if (outlink->type == AVMEDIA_TYPE_AUDIO) {
|
||||||
|
av_assert0( inlink-> in_samplerates->refcount > 0);
|
||||||
|
av_assert0( inlink->out_samplerates->refcount > 0);
|
||||||
|
av_assert0(outlink-> in_samplerates->refcount > 0);
|
||||||
|
av_assert0(outlink->out_samplerates->refcount > 0);
|
||||||
|
av_assert0( inlink-> in_channel_layouts->refcount > 0);
|
||||||
|
av_assert0( inlink->out_channel_layouts->refcount > 0);
|
||||||
|
av_assert0(outlink-> in_channel_layouts->refcount > 0);
|
||||||
|
av_assert0(outlink->out_channel_layouts->refcount > 0);
|
||||||
|
}
|
||||||
if (!ff_merge_formats( inlink->in_formats, inlink->out_formats, inlink->type) ||
|
if (!ff_merge_formats( inlink->in_formats, inlink->out_formats, inlink->type) ||
|
||||||
!ff_merge_formats(outlink->in_formats, outlink->out_formats, outlink->type))
|
!ff_merge_formats(outlink->in_formats, outlink->out_formats, outlink->type))
|
||||||
ret = AVERROR(ENOSYS);
|
ret = AVERROR(ENOSYS);
|
||||||
|
|
Loading…
Add table
Reference in a new issue