summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarti Maria <marti.maria@littlecms.com>2022-12-01 17:24:59 +0100
committerMarti Maria <marti.maria@littlecms.com>2022-12-01 17:24:59 +0100
commit486b5f537b2cbb7848590f2d153afccbffee4170 (patch)
tree90d2d953a15797aac13ce7afe8b47533ce248105 /src
parentba7004c8ff07bee2c9b6bccb8036611d8b0b2408 (diff)
downloadlcms2-486b5f537b2cbb7848590f2d153afccbffee4170.tar.gz
Enforce checks of matrices on absolute intent
Non-happy path should be honored. Check for divide by zero as well.
Diffstat (limited to 'src')
-rw-r--r--src/cmscnvrt.c8
-rw-r--r--src/cmswtpnt.c5
2 files changed, 8 insertions, 5 deletions
diff --git a/src/cmscnvrt.c b/src/cmscnvrt.c
index 50e5a1e..e8a51ae 100644
--- a/src/cmscnvrt.c
+++ b/src/cmscnvrt.c
@@ -370,11 +370,11 @@ cmsBool ComputeConversion(cmsUInt32Number i,
cmsCIEXYZ WhitePointIn, WhitePointOut;
cmsMAT3 ChromaticAdaptationMatrixIn, ChromaticAdaptationMatrixOut;
- _cmsReadMediaWhitePoint(&WhitePointIn, hProfiles[i-1]);
- _cmsReadCHAD(&ChromaticAdaptationMatrixIn, hProfiles[i-1]);
+ if (!_cmsReadMediaWhitePoint(&WhitePointIn, hProfiles[i - 1])) return FALSE;
+ if (!_cmsReadCHAD(&ChromaticAdaptationMatrixIn, hProfiles[i - 1])) return FALSE;
- _cmsReadMediaWhitePoint(&WhitePointOut, hProfiles[i]);
- _cmsReadCHAD(&ChromaticAdaptationMatrixOut, hProfiles[i]);
+ if (!_cmsReadMediaWhitePoint(&WhitePointOut, hProfiles[i])) return FALSE;
+ if (!_cmsReadCHAD(&ChromaticAdaptationMatrixOut, hProfiles[i])) return FALSE;
if (!ComputeAbsoluteIntent(AdaptationState,
&WhitePointIn, &ChromaticAdaptationMatrixIn,
diff --git a/src/cmswtpnt.c b/src/cmswtpnt.c
index a8e41b2..07d4746 100644
--- a/src/cmswtpnt.c
+++ b/src/cmswtpnt.c
@@ -215,12 +215,15 @@ cmsBool ComputeChromaticAdaptation(cmsMAT3* Conversion,
_cmsMAT3eval(&ConeSourceRGB, Chad, &ConeSourceXYZ);
_cmsMAT3eval(&ConeDestRGB, Chad, &ConeDestXYZ);
+ if ((fabs(ConeSourceRGB.n[0]) < MATRIX_DET_TOLERANCE) ||
+ (fabs(ConeSourceRGB.n[1]) < MATRIX_DET_TOLERANCE) ||
+ (fabs(ConeSourceRGB.n[2]) < MATRIX_DET_TOLERANCE)) return FALSE;
+
// Build matrix
_cmsVEC3init(&Cone.v[0], ConeDestRGB.n[0]/ConeSourceRGB.n[0], 0.0, 0.0);
_cmsVEC3init(&Cone.v[1], 0.0, ConeDestRGB.n[1]/ConeSourceRGB.n[1], 0.0);
_cmsVEC3init(&Cone.v[2], 0.0, 0.0, ConeDestRGB.n[2]/ConeSourceRGB.n[2]);
-
// Normalize
_cmsMAT3per(&Tmp, &Cone, Chad);
_cmsMAT3per(Conversion, &Chad_Inv, &Tmp);