avfilter/vf_quirc: resize the quirc buffers when the input size changes

Fixes: out of array access
Fixes: JbvzNObhorBp
Fixes: 030e140145 (lavfi: add quirc filter)
Found-by: Adrian Junge (vurlo)
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
Michael Niedermayer
2026-06-28 15:33:38 +02:00
committed by michaelni
parent f50e22c68d
commit 4da9812e25

View File

@@ -36,6 +36,7 @@ typedef struct QuircContext {
const AVClass *class;
struct quirc *quirc;
int width, height;
} QuircContext;
static av_cold int init(AVFilterContext *ctx)
@@ -67,6 +68,8 @@ static int config_input(AVFilterLink *inlink)
if (err == -1) {
return AVERROR(ENOMEM);
}
quirc->width = inlink->w;
quirc->height = inlink->h;
return 0;
}
@@ -80,6 +83,15 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
int codes_count;
uint8_t *image;
if (quirc->width != inlink->w || quirc->height != inlink->h) {
if (quirc_resize(quirc->quirc, inlink->w, inlink->h) < 0) {
av_frame_free(&frame);
return AVERROR(ENOMEM);
}
quirc->width = inlink->w;
quirc->height = inlink->h;
}
/* copy input image to quirc buffer */
image = quirc_begin(quirc->quirc, NULL, NULL);
av_image_copy_plane(image, inlink->w,