Fixed potential read-out-of-bounds issue in ICC profile loading
authorraftias <raftias@google.com>
Thu, 20 Oct 2016 17:38:58 +0000 (10:38 -0700)
committerCommit bot <commit-bot@chromium.org>
Thu, 20 Oct 2016 17:38:58 +0000 (10:38 -0700)
For 8-bit precision color LUT in A2B0 ICC color space profiles
it was skipping every 2nd CLUT value and then reading past the end
of the CLUT data table. Now it properly increments through
8-bit precision color LUT tables in profiles.

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2434563007

Review-Url: https://chromiumcodereview.appspot.com/2434563007

src/core/SkColorSpace_ICC.cpp

index df665ecd690c0ebbd2a87d872865e27ba3608e72..6fc3090caf2ce21ae98b783aec4ab362a110c0aa 100644 (file)
@@ -656,7 +656,7 @@ static bool load_color_lut(sk_sp<SkColorLookUpTable>* colorLUT, uint32_t inputCh
     const uint8_t* ptr = src + kColorLUTHeaderSize;
     for (uint32_t i = 0; i < numEntries; i++, ptr += precision) {
         if (1 == precision) {
-            table[i] = ((float) ptr[i]) / 255.0f;
+            table[i] = ((float) *ptr) / 255.0f;
         } else {
             table[i] = ((float) read_big_endian_u16(ptr)) / 65535.0f;
         }