From 0bd847232a1f430c70dd9d8df177ce68a3cde010 Mon Sep 17 00:00:00 2001 From: Nicolas Pena Date: Mon, 14 Aug 2017 10:36:01 -0400 Subject: LCMS: upgrade to 2.8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This CL upgrades LCMS from version 2.6 to 2.8. All changes from LCMS original version 2.8 are stored in patch files: - Patch 0: memory management modifications to use PDFium methods. This was previously not in any patch, so the changes were manually applied. - Patches 1-5: new patch files corresponding to old changes that can be seen in the history, but did not previously have patch files. - Patches 6-25: previous patches (patch numbers shifted by 6). The one for from16-to-8-overflow.patch was deleted as it was already upstream. Some patches did not apply cleanly so their .patch files were modified. - Patch 26: as I just moved files directly, unsupported characters were moved in unchanged, so I had to fix all of them: e with tilde and other characters were replaced to allow compilation on Windows. - Patch 27: Went over the code and re-applied changes that included comments clearly indicating this was Foxit. These changes are all already seen in the initial PDFium commit. Change-Id: Ic1d84e54803ef9e6b280ef7619bbf0b757312fbf Reviewed-on: https://pdfium-review.googlesource.com/10590 Commit-Queue: Nicolás Peña Reviewed-by: dsinclair --- .../lcms/0027-changes-from-beginning-of-time.patch | 152 +++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 third_party/lcms/0027-changes-from-beginning-of-time.patch (limited to 'third_party/lcms/0027-changes-from-beginning-of-time.patch') diff --git a/third_party/lcms/0027-changes-from-beginning-of-time.patch b/third_party/lcms/0027-changes-from-beginning-of-time.patch new file mode 100644 index 0000000000..9eeedd8102 --- /dev/null +++ b/third_party/lcms/0027-changes-from-beginning-of-time.patch @@ -0,0 +1,152 @@ +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 ++//sunliang.liu modified 2010426 for wince error ++# ifndef _WIN32_WCE ++# include ++# 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; + } -- cgit v1.2.3