Index: core/fxcodec/codec/fx_codec_icc.cpp |
diff --git a/core/fxcodec/codec/fx_codec_icc.cpp b/core/fxcodec/codec/fx_codec_icc.cpp |
index 8e48bfbfeaa935458ba8240351820ecaec4e880a..900faa1d0c2050e182ba4a2568dbfcb32983abd6 100644 |
--- a/core/fxcodec/codec/fx_codec_icc.cpp |
+++ b/core/fxcodec/codec/fx_codec_icc.cpp |
@@ -8,12 +8,6 @@ |
#include "core/fxcodec/fx_codec.h" |
#include "third_party/lcms2-2.6/include/lcms2.h" |
-const uint32_t N_COMPONENT_LAB = 3; |
-const uint32_t N_COMPONENT_GRAY = 1; |
-const uint32_t N_COMPONENT_RGB = 3; |
-const uint32_t N_COMPONENT_CMYK = 4; |
-const uint32_t N_COMPONENT_DEFAULT = 3; |
- |
struct CLcmsCmm { |
cmsHTRANSFORM m_hTransform; |
int m_nSrcComponents; |
@@ -59,28 +53,6 @@ FX_BOOL CheckComponents(cmsColorSpaceSignature cs, |
return TRUE; |
} |
-uint32_t GetCSComponents(cmsColorSpaceSignature cs) { |
- uint32_t components; |
- switch (cs) { |
- case cmsSigLabData: |
- components = N_COMPONENT_LAB; |
- break; |
- case cmsSigGrayData: |
- components = N_COMPONENT_GRAY; |
- break; |
- case cmsSigRgbData: |
- components = N_COMPONENT_RGB; |
- break; |
- case cmsSigCmykData: |
- components = N_COMPONENT_CMYK; |
- break; |
- default: |
- components = N_COMPONENT_DEFAULT; |
- break; |
- } |
- return components; |
-} |
- |
void* IccLib_CreateTransform(const unsigned char* pSrcProfileData, |
uint32_t dwSrcProfileSize, |
uint32_t& nSrcComponents, |
@@ -110,7 +82,15 @@ void* IccLib_CreateTransform(const unsigned char* pSrcProfileData, |
int srcFormat; |
FX_BOOL bLab = FALSE; |
cmsColorSpaceSignature srcCS = cmsGetColorSpace(srcProfile); |
- nSrcComponents = GetCSComponents(srcCS); |
+ |
+ nSrcComponents = cmsChannelsOf(srcCS); |
+ // According to PDF spec, number of components must be 1, 3, or 4. |
+ if (nSrcComponents != 1 && nSrcComponents != 3 && nSrcComponents != 4) { |
+ cmsCloseProfile(srcProfile); |
+ cmsCloseProfile(dstProfile); |
+ return nullptr; |
+ } |
+ |
if (srcCS == cmsSigLabData) { |
srcFormat = |
COLORSPACE_SH(PT_Lab) | CHANNELS_SH(nSrcComponents) | BYTES_SH(0); |