| /* | |
| * Copyright 2023 Google LLC | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #include "fuzz/Fuzz.h" | |
| #include "include/core/SkColorSpace.h" | |
| #include "include/core/SkData.h" | |
| #include "modules/skcms/skcms.h" | |
| void FuzzColorspace(const uint8_t *data, size_t size) { | |
| sk_sp<SkColorSpace> space(SkColorSpace::Deserialize(data, size)); | |
| if (!space) { | |
| return; | |
| } | |
| // Call some arbitrary methods on the colorspace, using a throw-away | |
| // variable to prevent the compiler from optimizing things away. | |
| int i = 0; | |
| if (space->gammaCloseToSRGB()) { | |
| i += 1; | |
| } | |
| if (space->gammaIsLinear()) { | |
| i += 1; | |
| } | |
| if (space->isSRGB()) { | |
| i += 1; | |
| } | |
| skcms_ICCProfile profile; | |
| space->toProfile(&profile); | |
| sk_sp<SkColorSpace> space2 = space->makeLinearGamma()->makeSRGBGamma()->makeColorSpin(); | |
| sk_sp<SkData> data1 = space->serialize(); | |
| if (SkColorSpace::Equals(space.get(), space2.get()) && i > 5) { | |
| SkDebugf("Should never happen %d", (int)data1->size()); | |
| space2->writeToMemory(nullptr); | |
| } | |
| } | |
| #if defined(SK_BUILD_FOR_LIBFUZZER) | |
| extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { | |
| if (size > 4000) { | |
| return 0; | |
| } | |
| FuzzColorspace(data, size); | |
| return 0; | |
| } | |
| #endif |