diff options
-rw-r--r-- | resources/icc_profiles/invalid_color_lut.icc | bin | 0 -> 688 bytes | |||
-rw-r--r-- | src/core/SkColorLookUpTable.h | 4 | ||||
-rw-r--r-- | src/core/SkColorSpace_ICC.cpp | 4 | ||||
-rw-r--r-- | tests/ColorSpaceTest.cpp | 15 |
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 Binary files differnew file mode 100644 index 0000000000..33384cd220 --- /dev/null +++ b/resources/icc_profiles/invalid_color_lut.icc 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) { |