Commit 1f24b33d authored by Paul B Mahol's avatar Paul B Mahol

avfilter/vf_tile: remove limit of max tile size

Signed-off-by: 's avatarPaul B Mahol <onemda@gmail.com>
parent 6a50a8f3
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
* tile video filter * tile video filter
*/ */
#include "libavutil/imgutils.h"
#include "libavutil/opt.h" #include "libavutil/opt.h"
#include "libavutil/pixdesc.h" #include "libavutil/pixdesc.h"
#include "avfilter.h" #include "avfilter.h"
...@@ -44,8 +45,6 @@ typedef struct TileContext { ...@@ -44,8 +45,6 @@ typedef struct TileContext {
uint8_t rgba_color[4]; uint8_t rgba_color[4];
} TileContext; } TileContext;
#define REASONABLE_SIZE 1024
#define OFFSET(x) offsetof(TileContext, x) #define OFFSET(x) offsetof(TileContext, x)
#define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM #define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
...@@ -68,12 +67,21 @@ static av_cold int init(AVFilterContext *ctx) ...@@ -68,12 +67,21 @@ static av_cold int init(AVFilterContext *ctx)
{ {
TileContext *tile = ctx->priv; TileContext *tile = ctx->priv;
if (tile->w > REASONABLE_SIZE || tile->h > REASONABLE_SIZE) { if (tile->w > UINT_MAX / tile->h) {
av_log(ctx, AV_LOG_ERROR, "Tile size %ux%u is insane.\n", av_log(ctx, AV_LOG_ERROR, "Tile size %ux%u is insane.\n",
tile->w, tile->h); tile->w, tile->h);
return AVERROR(EINVAL); return AVERROR(EINVAL);
} }
if (tile->padding) {
if ((tile->w - 1 > (UINT32_MAX - 2 * tile->margin) / tile->padding) ||
(tile->h - 1 > (UINT32_MAX - 2 * tile->margin) / tile->padding)) {
av_log(ctx, AV_LOG_ERROR, "Combination of Tile size %ux%u, padding %d and margin %d overflows.\n",
tile->w, tile->h, tile->padding, tile->margin);
return AVERROR(EINVAL);
}
}
if (tile->nb_frames == 0) { if (tile->nb_frames == 0) {
tile->nb_frames = tile->w * tile->h; tile->nb_frames = tile->w * tile->h;
} else if (tile->nb_frames > tile->w * tile->h) { } else if (tile->nb_frames > tile->w * tile->h) {
...@@ -142,6 +150,7 @@ static void draw_blank_frame(AVFilterContext *ctx, AVFrame *out_buf) ...@@ -142,6 +150,7 @@ static void draw_blank_frame(AVFilterContext *ctx, AVFrame *out_buf)
x0, y0, inlink->w, inlink->h); x0, y0, inlink->w, inlink->h);
tile->current++; tile->current++;
} }
static int end_last_frame(AVFilterContext *ctx) static int end_last_frame(AVFilterContext *ctx)
{ {
TileContext *tile = ctx->priv; TileContext *tile = ctx->priv;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment