From eb714c2c114c25be43891a43f12be8f718f5718b Mon Sep 17 00:00:00 2001 From: Marti Maria Date: Thu, 20 Jan 2011 15:36:28 +0100 Subject: Fixed memory leaks and safeguards against non-8 bit char --- include/lcms2.h | 4 ++++ src/cmslut.c | 6 +++--- src/cmstypes.c | 2 ++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/include/lcms2.h b/include/lcms2.h index ef121cb..ea5ac41 100644 --- a/include/lcms2.h +++ b/include/lcms2.h @@ -81,6 +81,10 @@ extern "C" { typedef unsigned char cmsUInt8Number; // That is guaranteed by the C99 spec typedef signed char cmsInt8Number; // That is guaranteed by the C99 spec +#if CHAR_BIT != 8 +# error "Unable to find 8 bit type, unsupported compiler" +#endif + // IEEE float storage numbers typedef float cmsFloat32Number; typedef double cmsFloat64Number; diff --git a/src/cmslut.c b/src/cmslut.c index d0fe9c8..77e63a2 100644 --- a/src/cmslut.c +++ b/src/cmslut.c @@ -256,7 +256,7 @@ cmsStage* CMSEXPORT cmsStageAllocToneCurves(cmsContext ContextID, cmsUInt32Numbe EvaluateCurves, CurveSetDup, CurveSetElemTypeFree, NULL ); if (NewMPE == NULL) return NULL; - NewElem = (_cmsStageToneCurvesData*) _cmsMalloc(ContextID, sizeof(_cmsStageToneCurvesData)); + NewElem = (_cmsStageToneCurvesData*) _cmsMallocZero(ContextID, sizeof(_cmsStageToneCurvesData)); if (NewElem == NULL) { cmsStageFree(NewMPE); return NULL; @@ -548,7 +548,7 @@ cmsStage* CMSEXPORT cmsStageAllocCLut16bitGranular(cmsContext ContextID, if (NewMPE == NULL) return NULL; - NewElem = (_cmsStageCLutData*) _cmsMalloc(ContextID, sizeof(_cmsStageCLutData)); + NewElem = (_cmsStageCLutData*) _cmsMallocZero(ContextID, sizeof(_cmsStageCLutData)); if (NewElem == NULL) { cmsStageFree(NewMPE); return NULL; @@ -635,7 +635,7 @@ cmsStage* CMSEXPORT cmsStageAllocCLutFloatGranular(cmsContext ContextID, const c if (NewMPE == NULL) return NULL; - NewElem = (_cmsStageCLutData*) _cmsMalloc(ContextID, sizeof(_cmsStageCLutData)); + NewElem = (_cmsStageCLutData*) _cmsMallocZero(ContextID, sizeof(_cmsStageCLutData)); if (NewElem == NULL) { cmsStageFree(NewMPE); return NULL; diff --git a/src/cmstypes.c b/src/cmstypes.c index 28f06d5..394a225 100644 --- a/src/cmstypes.c +++ b/src/cmstypes.c @@ -1602,6 +1602,7 @@ cmsBool Read8bitTables(cmsContext ContextID, cmsIOHANDLER* io, cmsPipeline* lut cmsToneCurve* Tables[cmsMAXCHANNELS]; if (nChannels > cmsMAXCHANNELS) return FALSE; + if (nChannels <= 0) return FALSE; memset(Tables, 0, sizeof(Tables)); @@ -1622,6 +1623,7 @@ cmsBool Read8bitTables(cmsContext ContextID, cmsIOHANDLER* io, cmsPipeline* lut } _cmsFree(ContextID, Temp); + Temp = NULL; mpe = cmsStageAllocToneCurves(ContextID, nChannels, Tables); -- cgit v1.2.1