summaryrefslogtreecommitdiff
path: root/src/cmslut.c
diff options
context:
space:
mode:
authorRobin Watts <robin@peeves.(none)>2013-03-29 09:31:07 -0700
committerRobin Watts <robin.watts@artifex.com>2013-03-29 19:26:10 +0000
commitb0d5ffd4ad91cf8683ee106f13742db3dc66599a (patch)
tree51e9fe4a7b469aa713c20b68bddfc885452086c2 /src/cmslut.c
parent570d411a316052fcc84f6bffe3940a01b6c422b7 (diff)
downloadlcms2-b0d5ffd4ad91cf8683ee106f13742db3dc66599a.tar.gz
Memory Squeezing: LCMS2: CLUTElemDup
Check for allocation failures and tidy up if found.
Diffstat (limited to 'src/cmslut.c')
-rw-r--r--src/cmslut.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/cmslut.c b/src/cmslut.c
index 019ec93..9e540f2 100644
--- a/src/cmslut.c
+++ b/src/cmslut.c
@@ -499,10 +499,15 @@ void* CLUTElemDup(cmsStage* mpe)
if (Data ->Tab.T) {
- if (Data ->HasFloatValues)
+ if (Data ->HasFloatValues) {
NewElem ->Tab.TFloat = (cmsFloat32Number*) _cmsDupMem(mpe ->ContextID, Data ->Tab.TFloat, Data ->nEntries * sizeof (cmsFloat32Number));
- else
+ if (NewElem ->Tab.TFloat == NULL)
+ goto Error;
+ } else {
NewElem ->Tab.T = (cmsUInt16Number*) _cmsDupMem(mpe ->ContextID, Data ->Tab.T, Data ->nEntries * sizeof (cmsUInt16Number));
+ if (NewElem ->Tab.TFloat == NULL)
+ goto Error;
+ }
}
NewElem ->Params = _cmsComputeInterpParamsEx(mpe ->ContextID,
@@ -511,8 +516,14 @@ void* CLUTElemDup(cmsStage* mpe)
Data ->Params ->nOutputs,
NewElem ->Tab.T,
Data ->Params ->dwFlags);
-
- return (void*) NewElem;
+ if (NewElem->Params != NULL)
+ return (void*) NewElem;
+ Error:
+ if (NewElem->Tab.T)
+ // This works for both types
+ _cmsFree(mpe ->ContextID, NewElem -> Tab.T);
+ _cmsFree(mpe ->ContextID, NewElem);
+ return NULL;
}