Precheck vips image types support

This commit is contained in:
DarthSim
2017-10-07 02:54:24 +06:00
parent c4d1f4b54f
commit c72c86a921
3 changed files with 27 additions and 28 deletions

View File

@@ -67,7 +67,7 @@ func checkTypeAndDimensions(r io.Reader) (imageType, error) {
if imgconf.Width > conf.MaxSrcDimension || imgconf.Height > conf.MaxSrcDimension {
return UNKNOWN, errors.New("File is too big")
}
if !imgtypeOk || !vipsTypeSupportedLoad(imgtype) {
if !imgtypeOk || !vipsTypeSupportLoad[imgtype] {
return UNKNOWN, errors.New("Source image type not supported")
}

View File

@@ -78,6 +78,8 @@ type processingOptions struct {
}
var vipsSupportSmartcrop bool
var vipsTypeSupportLoad = make(map[imageType]bool)
var vipsTypeSupportSave = make(map[imageType]bool)
func initVips() {
runtime.LockOSThread()
@@ -97,6 +99,29 @@ func initVips() {
}
vipsSupportSmartcrop = C.vips_support_smartcrop() == 1
if int(C.vips_type_find_load_go(C.JPEG)) != 0 {
vipsTypeSupportLoad[JPEG] = true
}
if int(C.vips_type_find_load_go(C.PNG)) != 0 {
vipsTypeSupportLoad[PNG] = true
}
if int(C.vips_type_find_load_go(C.WEBP)) != 0 {
vipsTypeSupportLoad[WEBP] = true
}
if int(C.vips_type_find_load_go(C.GIF)) != 0 {
vipsTypeSupportLoad[GIF] = true
}
if int(C.vips_type_find_save_go(C.JPEG)) != 0 {
vipsTypeSupportSave[JPEG] = true
}
if int(C.vips_type_find_save_go(C.PNG)) != 0 {
vipsTypeSupportSave[PNG] = true
}
if int(C.vips_type_find_save_go(C.WEBP)) != 0 {
vipsTypeSupportSave[WEBP] = true
}
}
func randomAccessRequired(po processingOptions) int {
@@ -106,32 +131,6 @@ func randomAccessRequired(po processingOptions) int {
return 0
}
func vipsTypeSupportedLoad(imgtype imageType) bool {
switch imgtype {
case JPEG:
return int(C.vips_type_find_load_go(C.JPEG)) != 0
case PNG:
return int(C.vips_type_find_load_go(C.PNG)) != 0
case WEBP:
return int(C.vips_type_find_load_go(C.WEBP)) != 0
case GIF:
return int(C.vips_type_find_load_go(C.GIF)) != 0
}
return false
}
func vipsTypeSupportedSave(imgtype imageType) bool {
switch imgtype {
case JPEG:
return int(C.vips_type_find_save_go(C.JPEG)) != 0
case PNG:
return int(C.vips_type_find_save_go(C.PNG)) != 0
case WEBP:
return int(C.vips_type_find_save_go(C.WEBP)) != 0
}
return false
}
func round(f float64) int {
return int(f + .5)
}

View File

@@ -77,7 +77,7 @@ func parsePath(r *http.Request) (string, processingOptions, error) {
return "", po, fmt.Errorf("Invalid image format: %s", filenameParts[1])
}
if !vipsTypeSupportedSave(po.format) {
if !vipsTypeSupportSave[po.format] {
return "", po, errors.New("Resulting image type not supported")
}