| diff --git a/third_party/lcms/src/cmscgats.c b/third_party/lcms/src/cmscgats.c |
| index a0c25c024..55f74ede8 100644 |
| --- a/third_party/lcms/src/cmscgats.c |
| +++ b/third_party/lcms/src/cmscgats.c |
| @@ -38,7 +38,10 @@ |
| #define DEFAULT_DBL_FORMAT "%.10g" // Double formatting |
| |
| #ifdef CMS_IS_WINDOWS_ |
| -# include <io.h> |
| +//sunliang.liu modified 2010426 for wince error |
| +# ifndef _WIN32_WCE |
| +# include <io.h> |
| +# endif |
| # define DIR_CHAR '\\' |
| #else |
| # define DIR_CHAR '/' |
| diff --git a/third_party/lcms/src/cmsgamma.c b/third_party/lcms/src/cmsgamma.c |
| index eb3dd881c..6e36cf462 100644 |
| --- a/third_party/lcms/src/cmsgamma.c |
| +++ b/third_party/lcms/src/cmsgamma.c |
| @@ -749,14 +749,19 @@ void CMSEXPORT cmsFreeToneCurve(cmsToneCurve* Curve) |
| { |
| cmsContext ContextID; |
| |
| - if (Curve == NULL) return; |
| + // added by Xiaochuan Liu |
| + // Curve->InterpParams may be null |
| + if (Curve == NULL || Curve->InterpParams == NULL) return; |
| |
| ContextID = Curve ->InterpParams->ContextID; |
| |
| _cmsFreeInterpParams(Curve ->InterpParams); |
| + Curve ->InterpParams = NULL; |
| |
| - if (Curve -> Table16) |
| + if (Curve -> Table16) { |
| _cmsFree(ContextID, Curve ->Table16); |
| + Curve ->Table16 = NULL; |
| + } |
| |
| if (Curve ->Segments) { |
| |
| @@ -766,20 +771,30 @@ void CMSEXPORT cmsFreeToneCurve(cmsToneCurve* Curve) |
| |
| if (Curve ->Segments[i].SampledPoints) { |
| _cmsFree(ContextID, Curve ->Segments[i].SampledPoints); |
| + Curve ->Segments[i].SampledPoints = NULL; |
| } |
| |
| - if (Curve ->SegInterp[i] != 0) |
| + if (Curve ->SegInterp[i] != 0) { |
| _cmsFreeInterpParams(Curve->SegInterp[i]); |
| + Curve->SegInterp[i] = NULL; |
| + } |
| } |
| |
| _cmsFree(ContextID, Curve ->Segments); |
| + Curve ->Segments = NULL; |
| _cmsFree(ContextID, Curve ->SegInterp); |
| + Curve ->SegInterp = NULL; |
| } |
| |
| - if (Curve -> Evals) |
| + if (Curve -> Evals) { |
| _cmsFree(ContextID, Curve -> Evals); |
| + Curve -> Evals = NULL; |
| + } |
| |
| - if (Curve) _cmsFree(ContextID, Curve); |
| + if (Curve) { |
| + _cmsFree(ContextID, Curve); |
| + Curve = NULL; |
| + } |
| } |
| |
| // Utility function, free 3 gamma tables |
| @@ -799,7 +814,10 @@ void CMSEXPORT cmsFreeToneCurveTriple(cmsToneCurve* Curve[3]) |
| // Duplicate a gamma table |
| cmsToneCurve* CMSEXPORT cmsDupToneCurve(const cmsToneCurve* In) |
| { |
| - if (In == NULL || In ->Segments == NULL || In ->Table16 == NULL) return NULL; |
| + // Xiaochuan Liu |
| + // fix openpdf bug(mantis id:0055683, google id:360198) |
| + // the function CurveSetElemTypeFree in cmslut.c also needs to check pointer |
| + if (In == NULL || In ->InterpParams == NULL || In ->Segments == NULL || In ->Table16 == NULL) return NULL; |
| |
| return AllocateToneCurveStruct(In ->InterpParams ->ContextID, In ->nEntries, In ->nSegments, In ->Segments, In ->Table16); |
| } |
| diff --git a/third_party/lcms/src/cmsio0.c b/third_party/lcms/src/cmsio0.c |
| index 1b026488d..cc5f89064 100644 |
| --- a/third_party/lcms/src/cmsio0.c |
| +++ b/third_party/lcms/src/cmsio0.c |
| @@ -479,6 +479,14 @@ cmsIOHANDLER* CMSEXPORT cmsGetProfileIOhandler(cmsHPROFILE hProfile) |
| return Icc->IOhandler; |
| } |
| |
| +#ifdef _WIN32_WCE |
| +time_t wceex_time(time_t *timer); |
| +struct tm * wceex_gmtime(const time_t *timer); |
| + |
| +#define time wceex_time |
| +#define gmtime wceex_gmtime |
| +#endif |
| + |
| // Creates an empty structure holding all required parameters |
| cmsHPROFILE CMSEXPORT cmsCreateProfilePlaceholder(cmsContext ContextID) |
| { |
| @@ -570,6 +578,14 @@ int _cmsSearchTag(_cmsICCPROFILE* Icc, cmsTagSignature sig, cmsBool lFollowLinks |
| |
| // Yes, follow link |
| if (LinkedSig != (cmsTagSignature) 0) { |
| + // fix bug mantis id#0055942 |
| + // assume that TRCTag and ColorantTag can't be linked. |
| + // Xiaochuan Liu 2014-04-23 |
| + if ((sig == cmsSigRedTRCTag || sig == cmsSigGreenTRCTag || sig == cmsSigBlueTRCTag) && |
| + (LinkedSig == cmsSigRedColorantTag || LinkedSig == cmsSigGreenColorantTag || LinkedSig == cmsSigBlueColorantTag)) |
| + { |
| + return n; |
| + } |
| sig = LinkedSig; |
| } |
| |
| @@ -1363,6 +1379,12 @@ Error: |
| return 0; |
| } |
| |
| +#ifdef _WIN32_WCE |
| +int wceex_unlink(const char *filename); |
| +#ifndef remove |
| +# define remove wceex_unlink |
| +#endif |
| +#endif |
| |
| // Low-level save to disk. |
| cmsBool CMSEXPORT cmsSaveProfileToFile(cmsHPROFILE hProfile, const char* FileName) |
| diff --git a/third_party/lcms/src/cmsio1.c b/third_party/lcms/src/cmsio1.c |
| index 364741c9e..4b12ae18e 100644 |
| --- a/third_party/lcms/src/cmsio1.c |
| +++ b/third_party/lcms/src/cmsio1.c |
| @@ -201,7 +201,11 @@ cmsPipeline* BuildGrayInputMatrixPipeline(cmsHPROFILE hProfile) |
| return Lut; |
| |
| Error: |
| - cmsFreeToneCurve(GrayTRC); |
| + // memory pointed by GrayTRC is not a new malloc memory, so don't free it here, |
| + // memory pointed by GrayTRC will be freed when hProfile is closed. |
| + // test file :0047776_Pocket Medicine_ The Massachusetts General Hospital Handbook of Internal Medicine-2.pdf |
| + // Xiaochuan Liu, 20140421 |
| + //cmsFreeToneCurve(GrayTRC); |
| cmsPipelineFree(Lut); |
| return NULL; |
| } |