From 3bdd70fc661feaf915ae438e05f66cce75334673 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20B=C5=93sch?= Date: Tue, 18 Dec 2012 21:44:51 +0100 Subject: [PATCH] lavfi/gradfun: reduce up limit for threshold. This will prevent an overflow in the SSSE3 and MMX filter_line code: delta is expressed as an u16 being shifted by 2 to the left. If it overflows, having a strength not above 64 will make sure that m is set to 0 (making the m*m*delta >> 14 expression void). A value above 64 should not make any sense unless gradfun is used as a blur filter. --- doc/filters.texi | 2 +- libavfilter/version.h | 2 +- libavfilter/vf_gradfun.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/filters.texi b/doc/filters.texi index 827dcf3753..2f50d65bb8 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -2670,7 +2670,7 @@ The filter takes two optional parameters, separated by ':': @var{strength} is the maximum amount by which the filter will change any one pixel. Also the threshold for detecting nearly flat -regions. Acceptable values range from .51 to 255, default value is +regions. Acceptable values range from .51 to 64, default value is 1.2, out-of-range values will be clipped to the valid range. @var{radius} is the neighborhood to fit the gradient to. A larger diff --git a/libavfilter/version.h b/libavfilter/version.h index 048cacec3e..26b66457c5 100644 --- a/libavfilter/version.h +++ b/libavfilter/version.h @@ -30,7 +30,7 @@ #define LIBAVFILTER_VERSION_MAJOR 3 #define LIBAVFILTER_VERSION_MINOR 28 -#define LIBAVFILTER_VERSION_MICRO 100 +#define LIBAVFILTER_VERSION_MICRO 101 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ LIBAVFILTER_VERSION_MINOR, \ diff --git a/libavfilter/vf_gradfun.c b/libavfilter/vf_gradfun.c index 9255f614a2..6319bf7d28 100644 --- a/libavfilter/vf_gradfun.c +++ b/libavfilter/vf_gradfun.c @@ -128,7 +128,7 @@ static av_cold int init(AVFilterContext *ctx, const char *args) if (args) sscanf(args, "%f:%d", &thresh, &radius); - thresh = av_clipf(thresh, 0.51, 255); + thresh = av_clipf(thresh, 0.51, 64); gf->thresh = (1 << 15) / thresh; gf->radius = av_clip((radius + 1) & ~1, 4, 32);