aboutsummaryrefslogtreecommitdiffhomepage
path: root/resources
diff options
context:
space:
mode:
authorJoe Mooring <[email protected]>2022-03-20 10:55:02 -0700
committerBjørn Erik Pedersen <[email protected]>2022-03-20 19:44:41 +0100
commitcad2d8cc70f25ca5e5107dd963c95b7b7c6840d1 (patch)
tree81d49f31256d83beb1f93e6e0155441ec0cc23ce /resources
parentb80853de90b10171155b8f3fde47d64ec7bfa0dd (diff)
downloadhugo-cad2d8cc70f25ca5e5107dd963c95b7b7c6840d1.tar.gz
hugo-cad2d8cc70f25ca5e5107dd963c95b7b7c6840d1.zip
resources/images: Require width and height for Crop, Fill, and Fit
Closes #9696
Diffstat (limited to 'resources')
-rw-r--r--resources/images/config.go13
-rw-r--r--resources/images/config_test.go32
2 files changed, 31 insertions, 14 deletions
diff --git a/resources/images/config.go b/resources/images/config.go
index e72bf5485..d553bda0f 100644
--- a/resources/images/config.go
+++ b/resources/images/config.go
@@ -253,8 +253,17 @@ func DecodeImageConfig(action, config string, defaults ImagingConfig, sourceForm
}
}
- if c.Width == 0 && c.Height == 0 {
- return c, errors.New("must provide Width or Height")
+ switch c.Action {
+ case "crop", "fill", "fit":
+ if c.Width == 0 || c.Height == 0 {
+ return c, errors.New("must provide Width and Height")
+ }
+ case "resize":
+ if c.Width == 0 && c.Height == 0 {
+ return c, errors.New("must provide Width or Height")
+ }
+ default:
+ return c, errors.Errorf("BUG: unknown action %q encountered while decoding image configuration", c.Action)
}
if c.FilterStr == "" {
diff --git a/resources/images/config_test.go b/resources/images/config_test.go
index 816a69cf9..1b785f7ca 100644
--- a/resources/images/config_test.go
+++ b/resources/images/config_test.go
@@ -80,25 +80,33 @@ func TestDecodeConfig(t *testing.T) {
func TestDecodeImageConfig(t *testing.T) {
for i, this := range []struct {
+ action string
in string
expect any
}{
- {"300x400", newImageConfig(300, 400, 75, 0, "box", "smart", "")},
- {"300x400 #fff", newImageConfig(300, 400, 75, 0, "box", "smart", "fff")},
- {"100x200 bottomRight", newImageConfig(100, 200, 75, 0, "box", "BottomRight", "")},
- {"10x20 topleft Lanczos", newImageConfig(10, 20, 75, 0, "Lanczos", "topleft", "")},
- {"linear left 10x r180", newImageConfig(10, 0, 75, 180, "linear", "left", "")},
- {"x20 riGht Cosine q95", newImageConfig(0, 20, 95, 0, "cosine", "right", "")},
-
- {"", false},
- {"foo", false},
+ {"resize", "300x400", newImageConfig("resize", 300, 400, 75, 0, "box", "smart", "")},
+ {"resize", "300x400 #fff", newImageConfig("resize", 300, 400, 75, 0, "box", "smart", "fff")},
+ {"resize", "100x200 bottomRight", newImageConfig("resize", 100, 200, 75, 0, "box", "BottomRight", "")},
+ {"resize", "10x20 topleft Lanczos", newImageConfig("resize", 10, 20, 75, 0, "Lanczos", "topleft", "")},
+ {"resize", "linear left 10x r180", newImageConfig("resize", 10, 0, 75, 180, "linear", "left", "")},
+ {"resize", "x20 riGht Cosine q95", newImageConfig("resize", 0, 20, 95, 0, "cosine", "right", "")},
+ {"crop", "300x400", newImageConfig("crop", 300, 400, 75, 0, "box", "smart", "")},
+ {"fill", "300x400", newImageConfig("fill", 300, 400, 75, 0, "box", "smart", "")},
+ {"fit", "300x400", newImageConfig("fit", 300, 400, 75, 0, "box", "smart", "")},
+
+ {"resize", "", false},
+ {"resize", "foo", false},
+ {"crop", "100x", false},
+ {"fill", "100x", false},
+ {"fit", "100x", false},
+ {"foo", "100x", false},
} {
cfg, err := DecodeConfig(nil)
if err != nil {
t.Fatal(err)
}
- result, err := DecodeImageConfig("resize", this.in, cfg, PNG)
+ result, err := DecodeImageConfig(this.action, this.in, cfg, PNG)
if b, ok := this.expect.(bool); ok && !b {
if err == nil {
t.Errorf("[%d] parseImageConfig didn't return an expected error", i)
@@ -114,8 +122,8 @@ func TestDecodeImageConfig(t *testing.T) {
}
}
-func newImageConfig(width, height, quality, rotate int, filter, anchor, bgColor string) ImageConfig {
- var c ImageConfig = GetDefaultImageConfig("resize", ImagingConfig{})
+func newImageConfig(action string, width, height, quality, rotate int, filter, anchor, bgColor string) ImageConfig {
+ var c ImageConfig = GetDefaultImageConfig(action, ImagingConfig{})
c.TargetFormat = PNG
c.Hint = 2
c.Width = width