1
0
mirror of https://github.com/imgproxy/imgproxy.git synced 2025-02-07 11:36:25 +02:00

Limit GIF frames to being processed

This commit is contained in:
DarthSim 2018-11-15 20:04:12 +06:00
parent d9d143c9f8
commit e8845f671b
5 changed files with 21 additions and 2 deletions

View File

@ -4,7 +4,7 @@
- [Plain source URLs](./docs/generating_the_url_advanced.md#plain) support;
- [Serving images from Google Cloud Storage](./docs/serving_files_from_google_cloud_storage.md);
- [Full support of GIFs](./docs/image_formats_support.md) including animated ones;
- [Full support of GIFs](./docs/image_formats_support.md#gif-support) including animated ones;
- [Watermarks](./docs/watermark.md);
- [New Relic](./docs/new_relic.md) metrics;
- [Prometheus](./docs/prometheus.md) metrics;

View File

@ -141,6 +141,7 @@ type config struct {
MaxSrcDimension int
MaxSrcResolution int
MaxGifFrames int
JpegProgressive bool
PngInterlaced bool
@ -201,6 +202,7 @@ var conf = config{
TTL: 3600,
IgnoreSslVerification: false,
MaxSrcResolution: 16800000,
MaxGifFrames: 1,
AllowInsecure: false,
SignatureSize: 32,
Quality: 80,
@ -240,6 +242,7 @@ func init() {
intEnvConfig(&conf.MaxSrcDimension, "IMGPROXY_MAX_SRC_DIMENSION")
megaIntEnvConfig(&conf.MaxSrcResolution, "IMGPROXY_MAX_SRC_RESOLUTION")
intEnvConfig(&conf.MaxGifFrames, "IMGPROXY_MAX_GIF_FRAMES")
boolEnvConfig(&conf.JpegProgressive, "IMGPROXY_JPEG_PROGRESSIVE")
boolEnvConfig(&conf.PngInterlaced, "IMGPROXY_PNG_INTERLACED")
@ -350,6 +353,10 @@ func init() {
log.Fatalf("Max src resolution should be greater than 0, now - %d\n", conf.MaxSrcResolution)
}
if conf.MaxGifFrames <= 0 {
log.Fatalf("Max GIF frames should be greater than 0, now - %d\n", conf.MaxGifFrames)
}
if conf.Quality <= 0 {
log.Fatalf("Quality should be greater than 0, now - %d\n", conf.Quality)
} else if conf.Quality > 100 {

View File

@ -42,6 +42,12 @@ imgproxy protects you from so-called image bombs. Here is how you can specify ma
* `IMGPROXY_MAX_SRC_RESOLUTION`: the maximum resolution of the source image, in megapixels. Images with larger actual size will be rejected. Default: `16.8`;
imgproxy can process animated GIFs, but since this operation is pretty heavy, only one frame is processed by default. You can increase the maximum of GIF frames to process with the following variable:
* `IMGPROXY_MAX_GIF_FRAMES`: the maximum of animated GIF frames to being processed. Default: `1`.
**Note:** imgproxy summarizes all GIF frames resolutions while checking source image resolution.
You can also specify a secret to enable authorization with the HTTP `Authorization` header for use in production environments:
* `IMGPROXY_SECRET`: the authorization token. If specified, the HTTP request should contain the `Authorization: Bearer %secret%` header;

View File

@ -10,3 +10,9 @@ At the moment, imgproxy supports only the most popular Web image formats:
## GIF support
imgproxy supports GIF output only when using libvips 8.7.0+ compiled with ImageMagick support. Official imgproxy Docker image supports GIF out of the box.
Since processing of animated GIFs is pretty heavy, only one frame is processed by default. You can increase the maximum of GIF frames to process with the following variable:
* `IMGPROXY_MAX_GIF_FRAMES`: the maximum of animated GIF frames to being processed. Default: `1`.
**Note:** imgproxy summarizes all GIF frames resolutions while checking source image resolution.

View File

@ -425,7 +425,7 @@ func transformGif(ctx context.Context, img **C.struct__VipsImage, po *processing
return err
}
framesCount := imgHeight / frameHeight
framesCount := minInt(imgHeight/frameHeight, conf.MaxGifFrames)
frames := make([]*C.struct__VipsImage, framesCount)
defer func() {