Fix for Fuzzer when AtoBType profiles are empty.
authorraftias <raftias@google.com>
Thu, 1 Dec 2016 21:40:51 +0000 (16:40 -0500)
committerSkia Commit-Bot <skia-commit-bot@chromium.org>
Thu, 1 Dec 2016 22:22:45 +0000 (22:22 +0000)
When all A/B/M-curves, the matrix and the CLUT were not there it would
crash. There is now a check to avoid that. Past this point it should not
be an empty, as SkColorSpaceXform did not make such an assumption.

BUG=skia:6023

Change-Id: I099bcef7efac100d438a30bf59d9c170119b8545
Reviewed-on: https://skia-review.googlesource.com/5480
Reviewed-by: Matt Sarett <msarett@google.com>
Commit-Queue: Robert Aftias <raftias@google.com>

src/core/SkColorSpace_ICC.cpp

index ea28c90612ba606f51ba80c06b00067ced33615b..84a29f0c6fa185c03fed83a4573c07c4e4060e9f 100644 (file)
@@ -1233,8 +1233,12 @@ static bool load_a2b0(std::vector<SkColorSpace_A2B::Element>* elements, const ui
                                (type>>16)&0xFF, (type>>8)&0xFF, type&0xFF);
             return false;
     }
+    SkASSERT(SkColorSpace_A2B::PCS::kLAB == pcs || SkColorSpace_A2B::PCS::kXYZ == pcs);
+    static constexpr int kPCSChannels = 3; // must be PCSLAB or PCSXYZ
+    if (elements->empty()) {
+        return kPCSChannels == icf_channels(inputColorFormat);
+    }
     // now let's verify that the input/output channels of each A2B element actually match up
-    SkASSERT(!elements->empty());
     if (icf_channels(inputColorFormat) != elements->front().inputChannels()) {
         SkColorSpacePrintf("Input channel count does not match first A2B element's input count");
         return false;
@@ -1245,8 +1249,6 @@ static bool load_a2b0(std::vector<SkColorSpace_A2B::Element>* elements, const ui
             return false;
         }
     }
-    SkASSERT(SkColorSpace_A2B::PCS::kLAB == pcs || SkColorSpace_A2B::PCS::kXYZ == pcs);
-    static constexpr int kPCSChannels = 3; // must be PCSLAB or PCSXYZ
     if (kPCSChannels != elements->back().outputChannels()) {
         SkColorSpacePrintf("PCS channel count doesn't match last A2B element's output count");
         return false;