summaryrefslogtreecommitdiff
path: root/third_party/lcms/0027-changes-from-beginning-of-time.patch
diff options
context:
space:
mode:
authorNicolas Pena <npm@chromium.org>2017-08-14 10:36:01 -0400
committerChromium commit bot <commit-bot@chromium.org>2017-08-14 15:02:17 +0000
commit0bd847232a1f430c70dd9d8df177ce68a3cde010 (patch)
tree15cec8c11493549f1974ae2f6aeac58234c176d2 /third_party/lcms/0027-changes-from-beginning-of-time.patch
parentdff02cee2d2410d81a55c59345fb38b5aac8a457 (diff)
downloadpdfium-0bd847232a1f430c70dd9d8df177ce68a3cde010.tar.xz
LCMS: upgrade to 2.8
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 <npm@chromium.org> Reviewed-by: dsinclair <dsinclair@chromium.org>
Diffstat (limited to 'third_party/lcms/0027-changes-from-beginning-of-time.patch')
-rw-r--r--third_party/lcms/0027-changes-from-beginning-of-time.patch152
1 files changed, 152 insertions, 0 deletions
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 <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;
+ }