You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

153 lines
5.1 KiB

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