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;
 | |
| }
 |