summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarti Maria <info@littlecms.com>2010-09-28 15:43:00 +0200
committerMarti Maria <info@littlecms.com>2010-09-28 15:43:00 +0200
commit80966a65a38ea9cb140b7fdba6bb3d32af0195db (patch)
tree32797e06e4cea3e8e5341318b8ed891bd1c1cf76
parent9e476cd747f18b6306abc1329050a564dc725b0d (diff)
downloadlcms2-80966a65a38ea9cb140b7fdba6bb3d32af0195db.tar.gz
Fixed memory leaks on error processing
-rw-r--r--src/cmslut.c22
-rw-r--r--src/cmstypes.c11
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);
}