diff --git a/libavfilter/vf_delogo.c b/libavfilter/vf_delogo.c index 63c3539467..065d093641 100644 --- a/libavfilter/vf_delogo.c +++ b/libavfilter/vf_delogo.c @@ -226,6 +226,20 @@ static av_cold int init(AVFilterContext *ctx) return 0; } +static int config_input(AVFilterLink *inlink) +{ + DelogoContext *s = inlink->dst->priv; + + /* Check whether the logo area fits in the frame */ + if (s->x + (s->band - 1) < 0 || s->x + s->w - (s->band*2 - 2) > inlink->w || + s->y + (s->band - 1) < 0 || s->y + s->h - (s->band*2 - 2) > inlink->h) { + av_log(s, AV_LOG_ERROR, "Logo area is outside of the frame.\n"); + return AVERROR(EINVAL); + } + + return 0; +} + static int filter_frame(AVFilterLink *inlink, AVFrame *in) { DelogoContext *s = inlink->dst->priv; @@ -284,6 +298,7 @@ static const AVFilterPad avfilter_vf_delogo_inputs[] = { .name = "default", .type = AVMEDIA_TYPE_VIDEO, .filter_frame = filter_frame, + .config_props = config_input, }, { NULL } };