diff options
author | Marti Maria <info@littlecms.com> | 2010-09-28 15:43:00 +0200 |
---|---|---|
committer | Marti Maria <info@littlecms.com> | 2010-09-28 15:43:00 +0200 |
commit | 80966a65a38ea9cb140b7fdba6bb3d32af0195db (patch) | |
tree | 32797e06e4cea3e8e5341318b8ed891bd1c1cf76 | |
parent | 9e476cd747f18b6306abc1329050a564dc725b0d (diff) | |
download | lcms2-80966a65a38ea9cb140b7fdba6bb3d32af0195db.tar.gz |
Fixed memory leaks on error processing
-rw-r--r-- | src/cmslut.c | 22 | ||||
-rw-r--r-- | src/cmstypes.c | 11 |
2 files changed, 24 insertions, 9 deletions
diff --git a/src/cmslut.c b/src/cmslut.c index 289b0a3..6ee2663 100644 --- a/src/cmslut.c +++ b/src/cmslut.c @@ -252,6 +252,8 @@ cmsStage* CMSEXPORT cmsStageAllocToneCurves(cmsContext ContextID, cmsUInt32Numbe return NULL; } + NewMPE ->Data = (void*) NewElem; + NewElem ->nCurves = nChannels; NewElem ->TheCurves = (cmsToneCurve**) _cmsCalloc(ContextID, nChannels, sizeof(cmsToneCurve*)); if (NewElem ->TheCurves == NULL) { @@ -274,8 +276,6 @@ cmsStage* CMSEXPORT cmsStageAllocToneCurves(cmsContext ContextID, cmsUInt32Numbe } } - NewMPE ->Data = (void*) NewElem; - return NewMPE; } @@ -526,7 +526,12 @@ cmsStage* CMSEXPORT cmsStageAllocCLut16bitGranular(cmsContext ContextID, if (NewMPE == NULL) return NULL; NewElem = (_cmsStageCLutData*) _cmsMalloc(ContextID, sizeof(_cmsStageCLutData)); - if (NewElem == NULL) return NULL; + if (NewElem == NULL) { + cmsStageFree(NewMPE); + return NULL; + } + + NewMPE ->Data = (void*) NewElem; NewElem -> nEntries = n = outputChan * CubeSize(clutPoints, inputChan); NewElem -> HasFloatValues = FALSE; @@ -549,8 +554,6 @@ cmsStage* CMSEXPORT cmsStageAllocCLut16bitGranular(cmsContext ContextID, return NULL; } - NewMPE ->Data = (void*) NewElem; - return NewMPE; } @@ -601,7 +604,12 @@ cmsStage* CMSEXPORT cmsStageAllocCLutFloatGranular(cmsContext ContextID, const c NewElem = (_cmsStageCLutData*) _cmsMalloc(ContextID, sizeof(_cmsStageCLutData)); - if (NewElem == NULL) return NULL; + if (NewElem == NULL) { + cmsStageFree(NewMPE); + return NULL; + } + + NewMPE ->Data = (void*) NewElem; NewElem -> nEntries = n = outputChan * CubeSize( clutPoints, inputChan); NewElem -> HasFloatValues = TRUE; @@ -618,7 +626,7 @@ cmsStage* CMSEXPORT cmsStageAllocCLutFloatGranular(cmsContext ContextID, const c } } - NewMPE ->Data = (void*) NewElem; + NewElem ->Params = _cmsComputeInterpParamsEx(ContextID, clutPoints, inputChan, outputChan, NewElem ->Tab.TFloat, CMS_LERP_FLAGS_FLOAT); if (NewElem ->Params == NULL) { diff --git a/src/cmstypes.c b/src/cmstypes.c index 72c7125..1c02d38 100644 --- a/src/cmstypes.c +++ b/src/cmstypes.c @@ -2039,10 +2039,17 @@ void *Type_LUT16_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cm T = (cmsUInt16Number*) _cmsCalloc(self ->ContextID, nTabSize, sizeof(cmsUInt16Number)); if (T == NULL) goto Error; - if (!_cmsReadUInt16Array(io, nTabSize, T)) goto Error; + if (!_cmsReadUInt16Array(io, nTabSize, T)) { + _cmsFree(self ->ContextID, T); + goto Error; + } mpeclut = cmsStageAllocCLut16bit(self ->ContextID, CLUTpoints, InputChannels, OutputChannels, T); - if (mpeclut == NULL) goto Error; + if (mpeclut == NULL) { + _cmsFree(self ->ContextID, T); + goto Error; + } + cmsPipelineInsertStage(NewLUT, cmsAT_END, mpeclut); _cmsFree(self ->ContextID, T); } |