diff options
author | Marti Maria <info@littlecms.com> | 2011-01-20 15:36:28 +0100 |
---|---|---|
committer | Marti Maria <info@littlecms.com> | 2011-01-20 15:36:28 +0100 |
commit | eb714c2c114c25be43891a43f12be8f718f5718b (patch) | |
tree | b2d4a298e8167071498c492eb9687f0e3a225267 | |
parent | fef1e099d253c7a9e0f78b3fcd2c4cd7c7a59284 (diff) | |
download | lcms2-eb714c2c114c25be43891a43f12be8f718f5718b.tar.gz |
Fixed memory leaks and safeguards against non-8 bit char
-rw-r--r-- | include/lcms2.h | 4 | ||||
-rw-r--r-- | src/cmslut.c | 6 | ||||
-rw-r--r-- | 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); |