avfilter/vf_floodfill: better fix for crash

This commit is contained in:
Paul B Mahol 2019-10-23 10:17:46 +02:00
parent 1cdc805228
commit 8732eb124e

View File

@ -35,6 +35,7 @@ typedef struct FloodfillContext {
int x, y;
int s[4];
int S[4];
int d[4];
int nb_planes;
@ -293,26 +294,30 @@ static int filter_frame(AVFilterLink *link, AVFrame *frame)
const int h = frame->height;
int i, ret;
for (i = 0; i < s->nb_planes; i++) {
if (s->s[i] != s->d[i])
break;
}
if (i == s->nb_planes)
goto end;
if (ret = av_frame_make_writable(frame))
return ret;
if (is_inside(s->x, s->y, w, h)) {
s->pick_pixel(frame, s->x, s->y, &s0, &s1, &s2, &s3);
s->S[0] = s0;
s->S[1] = s1;
s->S[2] = s2;
s->S[3] = s3;
for (i = 0; i < s->nb_planes; i++) {
if (s->S[i] != s->d[i])
break;
}
if (i == s->nb_planes)
goto end;
if (s->is_same(frame, s->x, s->y, s0, s1, s2, s3)) {
s->points[s->front].x = s->x;
s->points[s->front].y = s->y;
s->front++;
}
if (ret = av_frame_make_writable(frame))
return ret;
while (s->front > s->back) {
int x, y;