You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-09-16 08:36:51 +02:00
avfilter/graphparser: Fix leaks when parsing inputs fails
parse_inputs() uses a temporary linked list to parse the labeled inputs of a filter; said linked list owns its elements (and their names). On success, the list of unlabeled inputs is appened to the end of the list of labeled inputs and the new list is returned; yet on failures, nothing frees the already existing elements of the temporary linked list, leading to a leak. This can be triggered by e.g. using '-vf [v][' in the FFmpeg command-line tool. This leak seems to exist since4e781c25b7
. Reviewed-by: Nicolas George <george@nsup.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com> (cherry picked from commitb3f6dee728
)
This commit is contained in:
@@ -303,8 +303,10 @@ static int parse_inputs(const char **buf, AVFilterInOut **curr_inputs,
|
||||
char *name = parse_link_name(buf, log_ctx);
|
||||
AVFilterInOut *match;
|
||||
|
||||
if (!name)
|
||||
if (!name) {
|
||||
avfilter_inout_free(&parsed_inputs);
|
||||
return AVERROR(EINVAL);
|
||||
}
|
||||
|
||||
/* First check if the label is not in the open_outputs list */
|
||||
match = extract_inout(name, open_outputs);
|
||||
@@ -314,6 +316,7 @@ static int parse_inputs(const char **buf, AVFilterInOut **curr_inputs,
|
||||
} else {
|
||||
/* Not in the list, so add it as an input */
|
||||
if (!(match = av_mallocz(sizeof(AVFilterInOut)))) {
|
||||
avfilter_inout_free(&parsed_inputs);
|
||||
av_free(name);
|
||||
return AVERROR(ENOMEM);
|
||||
}
|
||||
|
Reference in New Issue
Block a user