mirror of https://github.com/google/oss-fuzz.git
51 lines
1.5 KiB
C
51 lines
1.5 KiB
C
// 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 <stdint.h>
|
|
|
|
#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;
|
|
}
|