aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--resources/icc_profiles/invalid_color_lut.iccbin0 -> 688 bytes
-rw-r--r--src/core/SkColorLookUpTable.h4
-rw-r--r--src/core/SkColorSpace_ICC.cpp4
-rw-r--r--tests/ColorSpaceTest.cpp15
4 files changed, 19 insertions, 4 deletions
diff --git a/resources/icc_profiles/invalid_color_lut.icc b/resources/icc_profiles/invalid_color_lut.icc
new file mode 100644
index 0000000000..33384cd220
--- /dev/null
+++ b/resources/icc_profiles/invalid_color_lut.icc
Binary files differ
diff --git a/src/core/SkColorLookUpTable.h b/src/core/SkColorLookUpTable.h
index cc5415bbe7..09d81880ea 100644
--- a/src/core/SkColorLookUpTable.h
+++ b/src/core/SkColorLookUpTable.h
@@ -21,6 +21,10 @@ public:
: fInputChannels(inputChannels) {
SkASSERT(inputChannels >= 1 && inputChannels <= kMaxColorChannels);
memcpy(fGridPoints, gridPoints, fInputChannels * sizeof(uint8_t));
+
+ for (int i = 0; i < inputChannels; i++) {
+ SkASSERT(fGridPoints[i] > 1);
+ }
}
/**
diff --git a/src/core/SkColorSpace_ICC.cpp b/src/core/SkColorSpace_ICC.cpp
index 6d4bba26bd..52196091fe 100644
--- a/src/core/SkColorSpace_ICC.cpp
+++ b/src/core/SkColorSpace_ICC.cpp
@@ -595,8 +595,8 @@ static bool load_color_lut(sk_sp<SkColorLookUpTable>* colorLUT, uint32_t inputCh
uint32_t numEntries = SkColorLookUpTable::kOutputChannels;
for (uint32_t i = 0; i < inputChannels; i++) {
- if (0 == gridPoints[i]) {
- SkColorSpacePrintf("Each input channel must have at least one grid point.");
+ if (1 >= gridPoints[i]) {
+ SkColorSpacePrintf("Each input channel must have at least two grid points.");
return false;
}
diff --git a/tests/ColorSpaceTest.cpp b/tests/ColorSpaceTest.cpp
index 2eb7347092..9b2e1b3dc6 100644
--- a/tests/ColorSpaceTest.cpp
+++ b/tests/ColorSpaceTest.cpp
@@ -446,10 +446,21 @@ DEF_TEST(ColorSpace_Primaries, r) {
DEF_TEST(ColorSpace_InvalidICC, r) {
// This color space has a matrix that is not D50.
- sk_sp<SkData> data = SkData::MakeFromFileName(
- GetResourcePath("icc_profiles/SM2333SW.icc").c_str());
+ sk_sp<SkData> data = GetResourceAsData("icc_profiles/SM2333SW.icc");
+ if (!data) {
+ return;
+ }
sk_sp<SkColorSpace> cs = SkColorSpace::MakeICC(data->data(), data->size());
REPORTER_ASSERT(r, !cs);
+
+ // The color space has a color lut with only one entry in each dimension.
+ data = GetResourceAsData("icc_profiles/invalid_color_lut.icc");
+ if (!data) {
+ return;
+ }
+
+ cs = SkColorSpace::MakeICC(data->data(), data->size());
+ REPORTER_ASSERT(r, !cs);
}
DEF_TEST(ColorSpace_MatrixHash, r) {