summaryrefslogtreecommitdiff
path: root/src/cmstypes.c
diff options
context:
space:
mode:
authorMarti <marti.maria@tktbrainpower.com>2016-12-15 17:04:09 +0100
committerMarti <marti.maria@tktbrainpower.com>2016-12-15 17:04:37 +0100
commit4011a6e3427c8c287226c5079ceee4c76d617dce (patch)
treee60d595786fc31f56e204295ad6a640a0e4fe4c8 /src/cmstypes.c
parentf802b7145d9f64b6689009f3ff2506f34f04f0a4 (diff)
downloadlcms2-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.c13
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;