|
@@ -1,6 +1,8 @@
|
|
|
package processing
|
|
|
|
|
|
import (
|
|
|
+ "math"
|
|
|
+
|
|
|
"github.com/imgproxy/imgproxy/v3/imagedata"
|
|
|
"github.com/imgproxy/imgproxy/v3/options"
|
|
|
"github.com/imgproxy/imgproxy/v3/vips"
|
|
@@ -11,6 +13,17 @@ func trim(pctx *pipelineContext, img *vips.Image, po *options.ProcessingOptions,
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
+ // The size of a vector image are not checked during download, yet it can be very large.
|
|
|
+ // So we should scale it down to the maximum allowed resolution
|
|
|
+ if imgdata != nil && imgdata.Type.IsVector() {
|
|
|
+ if resolution := img.Width() * img.Height(); resolution > po.SecurityOptions.MaxSrcResolution {
|
|
|
+ scale := math.Sqrt(float64(po.SecurityOptions.MaxSrcResolution) / float64(resolution))
|
|
|
+ if err := img.Load(imgdata, 1, scale, 1); err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// We need to import color profile before trim
|
|
|
if err := importColorProfile(pctx, img, po, imgdata); err != nil {
|
|
|
return err
|