diff options
-rw-r--r-- | src/core/SkColorSpace_ICC.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/core/SkColorSpace_ICC.cpp b/src/core/SkColorSpace_ICC.cpp index 4e81c30471..5c5cfe0e9a 100644 --- a/src/core/SkColorSpace_ICC.cpp +++ b/src/core/SkColorSpace_ICC.cpp @@ -1079,6 +1079,27 @@ bool load_a2b0_lutn_type(std::vector<SkColorSpace_A2B::Element>* elements, const inTableEntries = read_big_endian_u16(src + 48); outTableEntries = read_big_endian_u16(src + 50); precision = 2; + + constexpr size_t kMaxLut16GammaEntries = 4096; + if (inTableEntries < 2) { + SkColorSpacePrintf("Too few (%d) input gamma table entries. Must have at least 2.\n", + inTableEntries); + return false; + } else if (inTableEntries > kMaxLut16GammaEntries) { + SkColorSpacePrintf("Too many (%d) input gamma table entries. Must have at most %d.\n", + inTableEntries, kMaxLut16GammaEntries); + return false; + } + + if (outTableEntries < 2) { + SkColorSpacePrintf("Too few (%d) output gamma table entries. Must have at least 2.\n", + outTableEntries); + return false; + } else if (outTableEntries > kMaxLut16GammaEntries) { + SkColorSpacePrintf("Too many (%d) output gamma table entries. Must have at most %d.\n", + outTableEntries, kMaxLut16GammaEntries); + return false; + } } const size_t inputOffset = dataOffset; |