// Copyright 2016 The PDFium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include #include "lcms2.h" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { cmsHPROFILE srcProfile = cmsOpenProfileFromMem(data, size); if (!srcProfile) return 0; cmsHPROFILE dstProfile = cmsCreate_sRGBProfile(); if (!dstProfile) { cmsCloseProfile(srcProfile); return 0; } cmsColorSpaceSignature srcCS = cmsGetColorSpace(srcProfile); cmsUInt32Number nSrcComponents = cmsChannelsOf(srcCS); cmsUInt32Number srcFormat; if (srcCS == cmsSigLabData) { srcFormat = COLORSPACE_SH(PT_Lab) | CHANNELS_SH(nSrcComponents) | BYTES_SH(0); } else { srcFormat = COLORSPACE_SH(PT_ANY) | CHANNELS_SH(nSrcComponents) | BYTES_SH(1); } cmsUInt32Number intent = 0; cmsUInt32Number flags = 0; cmsHTRANSFORM hTransform = cmsCreateTransform( srcProfile, srcFormat, dstProfile, TYPE_BGR_8, intent, flags); cmsCloseProfile(srcProfile); cmsCloseProfile(dstProfile); if (!hTransform) return 0; uint8_t output[4]; if (T_BYTES(srcFormat) == 0) { // 0 means double double input[nSrcComponents]; for (uint32_t i = 0; i < nSrcComponents; i++) input[i] = 0.5f; cmsDoTransform(hTransform, input, output, 1); } else { uint8_t input[nSrcComponents]; for (uint32_t i = 0; i < nSrcComponents; i++) input[i] = 128; cmsDoTransform(hTransform, input, output, 1); } cmsDeleteTransform(hTransform); return 0; }