webp: don't reject VP8X that isn't just VP8 + alpha
We already support VP8 + alpha, but reject e.g. VP8 + EXIF. After this
commit, we still don't implement VP8 + EXIF (or ANIM, ICCP, etc.), but
we now silently ignore the EXIF chunk instead of rejecting it.
Fixes golang/go#25738, golang/go#38341
Change-Id: I4e9cdb718f0768f34336eab9528b82d2c40a3ee1
GitHub-Last-Rev: a0c2e5347cf32d4b16b54aad63a1a107de927744
GitHub-Pull-Request: golang/image#5
Reviewed-on: https://go-review.googlesource.com/c/image/+/249445
Trust: David Symonds <dsymonds@golang.org>
Reviewed-by: Nigel Tao <nigeltao@golang.org>
diff --git a/webp/decode.go b/webp/decode.go
index f77a4eb..d6eefd5 100644
--- a/webp/decode.go
+++ b/webp/decode.go
@@ -126,22 +126,23 @@
alphaBit = 1 << 4
iccProfileBit = 1 << 5
)
- if buf[0] != alphaBit {
- return nil, image.Config{}, errors.New("webp: non-Alpha VP8X is not implemented")
- }
+ wantAlpha = (buf[0] & alphaBit) != 0
widthMinusOne = uint32(buf[4]) | uint32(buf[5])<<8 | uint32(buf[6])<<16
heightMinusOne = uint32(buf[7]) | uint32(buf[8])<<8 | uint32(buf[9])<<16
if configOnly {
+ if wantAlpha {
+ return nil, image.Config{
+ ColorModel: color.NYCbCrAModel,
+ Width: int(widthMinusOne) + 1,
+ Height: int(heightMinusOne) + 1,
+ }, nil
+ }
return nil, image.Config{
- ColorModel: color.NYCbCrAModel,
+ ColorModel: color.YCbCrModel,
Width: int(widthMinusOne) + 1,
Height: int(heightMinusOne) + 1,
}, nil
}
- wantAlpha = true
-
- default:
- return nil, image.Config{}, errInvalidFormat
}
}
}