aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/core/SkColorSpace_ICC.cpp21
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;