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