summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarti Maria <info@littlecms.com>2011-01-20 15:36:28 +0100
committerMarti Maria <info@littlecms.com>2011-01-20 15:36:28 +0100
commiteb714c2c114c25be43891a43f12be8f718f5718b (patch)
treeb2d4a298e8167071498c492eb9687f0e3a225267
parentfef1e099d253c7a9e0f78b3fcd2c4cd7c7a59284 (diff)
downloadlcms2-eb714c2c114c25be43891a43f12be8f718f5718b.tar.gz
Fixed memory leaks and safeguards against non-8 bit char
-rw-r--r--include/lcms2.h4
-rw-r--r--src/cmslut.c6
-rw-r--r--src/cmstypes.c2
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);