/src/cms_transform_fuzzer.c
Line | Count | Source (jump to first uncovered line) |
1 | | // Copyright 2016 The PDFium Authors. All rights reserved. |
2 | | // Use of this source code is governed by a BSD-style license that can be |
3 | | // found in the LICENSE file. |
4 | | #include <stdint.h> |
5 | | |
6 | | #include "lcms2.h" |
7 | | |
8 | 5.81k | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { |
9 | 5.81k | cmsHPROFILE srcProfile = cmsOpenProfileFromMem(data, size); |
10 | 5.81k | if (!srcProfile) return 0; |
11 | | |
12 | 5.09k | cmsHPROFILE dstProfile = cmsCreate_sRGBProfile(); |
13 | 5.09k | if (!dstProfile) { |
14 | 0 | cmsCloseProfile(srcProfile); |
15 | 0 | return 0; |
16 | 0 | } |
17 | | |
18 | 5.09k | cmsColorSpaceSignature srcCS = cmsGetColorSpace(srcProfile); |
19 | 5.09k | cmsUInt32Number nSrcComponents = cmsChannelsOf(srcCS); |
20 | 5.09k | cmsUInt32Number srcFormat; |
21 | 5.09k | if (srcCS == cmsSigLabData) { |
22 | 324 | srcFormat = |
23 | 324 | COLORSPACE_SH(PT_Lab) | CHANNELS_SH(nSrcComponents) | BYTES_SH(0); |
24 | 4.77k | } else { |
25 | 4.77k | srcFormat = |
26 | 4.77k | COLORSPACE_SH(PT_ANY) | CHANNELS_SH(nSrcComponents) | BYTES_SH(1); |
27 | 4.77k | } |
28 | | |
29 | 5.09k | cmsUInt32Number intent = 0; |
30 | 5.09k | cmsUInt32Number flags = 0; |
31 | 5.09k | cmsHTRANSFORM hTransform = cmsCreateTransform( |
32 | 5.09k | srcProfile, srcFormat, dstProfile, TYPE_BGR_8, intent, flags); |
33 | 5.09k | cmsCloseProfile(srcProfile); |
34 | 5.09k | cmsCloseProfile(dstProfile); |
35 | 5.09k | if (!hTransform) return 0; |
36 | | |
37 | 633 | uint8_t output[4]; |
38 | 633 | if (T_BYTES(srcFormat) == 0) { // 0 means double |
39 | 0 | double input[nSrcComponents]; |
40 | 0 | for (uint32_t i = 0; i < nSrcComponents; i++) input[i] = 0.5f; |
41 | 0 | cmsDoTransform(hTransform, input, output, 1); |
42 | 633 | } else { |
43 | 633 | uint8_t input[nSrcComponents]; |
44 | 3.38k | for (uint32_t i = 0; i < nSrcComponents; i++) input[i] = 128; |
45 | 633 | cmsDoTransform(hTransform, input, output, 1); |
46 | 633 | } |
47 | 633 | cmsDeleteTransform(hTransform); |
48 | | |
49 | 633 | return 0; |
50 | 5.09k | } |