diff options
author | Robin Watts <robin@peeves.(none)> | 2013-03-29 09:31:07 -0700 |
---|---|---|
committer | Robin Watts <robin.watts@artifex.com> | 2013-03-29 19:26:10 +0000 |
commit | b0d5ffd4ad91cf8683ee106f13742db3dc66599a (patch) | |
tree | 51e9fe4a7b469aa713c20b68bddfc885452086c2 | |
parent | 570d411a316052fcc84f6bffe3940a01b6c422b7 (diff) | |
download | lcms2-b0d5ffd4ad91cf8683ee106f13742db3dc66599a.tar.gz |
Memory Squeezing: LCMS2: CLUTElemDup
Check for allocation failures and tidy up if found.
-rw-r--r-- | src/cmslut.c | 19 |
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; } |