diff options
author | Marti Maria <marti.maria@littlecms.com> | 2022-12-01 17:24:59 +0100 |
---|---|---|
committer | Marti Maria <marti.maria@littlecms.com> | 2022-12-01 17:24:59 +0100 |
commit | 486b5f537b2cbb7848590f2d153afccbffee4170 (patch) | |
tree | 90d2d953a15797aac13ce7afe8b47533ce248105 /src | |
parent | ba7004c8ff07bee2c9b6bccb8036611d8b0b2408 (diff) | |
download | lcms2-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.c | 8 | ||||
-rw-r--r-- | src/cmswtpnt.c | 5 |
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); |