diff options
author | Marti <marti.maria@tktbrainpower.com> | 2016-12-15 17:04:09 +0100 |
---|---|---|
committer | Marti <marti.maria@tktbrainpower.com> | 2016-12-15 17:04:37 +0100 |
commit | 4011a6e3427c8c287226c5079ceee4c76d617dce (patch) | |
tree | e60d595786fc31f56e204295ad6a640a0e4fe4c8 /src/cmstypes.c | |
parent | f802b7145d9f64b6689009f3ff2506f34f04f0a4 (diff) | |
download | lcms2-4011a6e3427c8c287226c5079ceee4c76d617dce.tar.gz |
sanitize floating point read
Added a check for floating point validation
Diffstat (limited to 'src/cmstypes.c')
-rw-r--r-- | src/cmstypes.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/cmstypes.c b/src/cmstypes.c index bf51326..ef54f34 100644 --- a/src/cmstypes.c +++ b/src/cmstypes.c @@ -60,6 +60,11 @@ typedef struct _cmsTagTypeLinkedList_st { // Helper macro to define a MPE handler. Callbacks do have a fixed naming convention #define TYPE_MPE_HANDLER(t, x) { (t), READ_FN(x), WRITE_FN(x), GenericMPEdup, GenericMPEfree, NULL, 0 } +// Infinites +#define MINUS_INF (-1E22F) +#define PLUS_INF (+1E22F) + + // Register a new type handler. This routine is shared between normal types and MPE. LinkedList points to the optional list head static cmsBool RegisterTypesPlugin(cmsContext id, cmsPluginBase* Data, _cmsMemoryClient pos) @@ -3920,7 +3925,7 @@ cmsToneCurve* ReadSegmentedCurve(struct _cms_typehandler_struct* self, cmsIOHAND cmsUInt16Number nSegments; cmsCurveSegment* Segments; cmsToneCurve* Curve; - cmsFloat32Number PrevBreak = -1E22F; // - infinite + cmsFloat32Number PrevBreak = MINUS_INF; // - infinite // Take signature and channels for each element. if (!_cmsReadUInt32Number(io, (cmsUInt32Number*) &ElementSig)) return NULL; @@ -3945,7 +3950,7 @@ cmsToneCurve* ReadSegmentedCurve(struct _cms_typehandler_struct* self, cmsIOHAND } Segments[nSegments-1].x0 = PrevBreak; - Segments[nSegments-1].x1 = 1E22F; // A big cmsFloat32Number number + Segments[nSegments-1].x1 = PLUS_INF; // A big cmsFloat32Number number // Read segments for (i=0; i < nSegments; i++) { @@ -4318,11 +4323,11 @@ void *Type_MPEclut_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, mpe = cmsStageAllocCLutFloatGranular(self ->ContextID, GridPoints, InputChans, OutputChans, NULL); if (mpe == NULL) goto Error; - // Read the data + // Read and sanitize the data clut = (_cmsStageCLutData*) mpe ->Data; for (i=0; i < clut ->nEntries; i++) { - if (!_cmsReadFloat32Number(io, &clut ->Tab.TFloat[i])) goto Error; + if (!_cmsReadFloat32Number(io, &clut->Tab.TFloat[i])) goto Error; } *nItems = 1; |