summaryrefslogtreecommitdiff
path: root/src/cmstypes.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmstypes.c')
-rw-r--r--src/cmstypes.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/cmstypes.c b/src/cmstypes.c
index e204727..4548c32 100644
--- a/src/cmstypes.c
+++ b/src/cmstypes.c
@@ -1221,17 +1221,23 @@ static
cmsBool Type_ParametricCurve_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems)
{
cmsToneCurve* Curve = (cmsToneCurve*) Ptr;
- int i, nParams;
+ int i, nParams, typen;
static const int ParamsByType[] = { 0, 1, 3, 4, 5, 7 };
+ typen = Curve -> Segments[0].Type;
- if (Curve ->nSegments > 1 || Curve -> Segments[0].Type < 1) {
+ if (Curve ->nSegments > 1 || typen < 1) {
- cmsSignalError(self->ContextID, 0, "Multisegment or Inverted parametric curves cannot be written");
+ cmsSignalError(self->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Multisegment or Inverted parametric curves cannot be written");
return FALSE;
}
- nParams = ParamsByType[Curve ->Segments[0].Type];
+ if (typen > 5) {
+ cmsSignalError(self->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsupported parametric curve");
+ return FALSE;
+ }
+
+ nParams = ParamsByType[typen];
if (!_cmsWriteUInt16Number(io, (cmsUInt16Number) (Curve ->Segments[0].Type - 1))) return FALSE;
if (!_cmsWriteUInt16Number(io, 0)) return FALSE; // Reserved