diff options
author | Marti Maria <marti.maria@littlecms.com> | 2022-01-23 15:48:03 +0100 |
---|---|---|
committer | Marti Maria <marti.maria@littlecms.com> | 2022-01-23 15:48:03 +0100 |
commit | ca7d833d54c164311d32cf842b6e08216cf1467c (patch) | |
tree | 24d31630d4bdb0614eea0c790ee67fea53372d09 /src | |
parent | da3da4bca90ef9ad10f9e2e5a3452a680a66c979 (diff) | |
download | lcms2-ca7d833d54c164311d32cf842b6e08216cf1467c.tar.gz |
keep an eye to the accuracy
In[0] + In[1] + In[2] may overflow, (cmsFloat64Number) In[0] + In[1] + In[2] is safe.
Same on promotion to double before multiplication.
Diffstat (limited to 'src')
-rw-r--r-- | src/cmsalpha.c | 12 | ||||
-rw-r--r-- | src/cmsvirt.c | 2 |
2 files changed, 7 insertions, 7 deletions
diff --git a/src/cmsalpha.c b/src/cmsalpha.c index ac5cc58..5e30172 100644 --- a/src/cmsalpha.c +++ b/src/cmsalpha.c @@ -191,21 +191,21 @@ static void fromFLTto8(void* dst, const void* src) { cmsFloat32Number n = *(cmsFloat32Number*)src; - *(cmsUInt8Number*)dst = _cmsQuickSaturateByte(n * 255.0f); + *(cmsUInt8Number*)dst = _cmsQuickSaturateByte(n * 255.0); } static void fromFLTto16(void* dst, const void* src) { cmsFloat32Number n = *(cmsFloat32Number*)src; - *(cmsUInt16Number*)dst = _cmsQuickSaturateWord(n * 65535.0f); + *(cmsUInt16Number*)dst = _cmsQuickSaturateWord(n * 65535.0); } static void fromFLTto16SE(void* dst, const void* src) { cmsFloat32Number n = *(cmsFloat32Number*)src; - cmsUInt16Number i = _cmsQuickSaturateWord(n * 65535.0f); + cmsUInt16Number i = _cmsQuickSaturateWord(n * 65535.0); *(cmsUInt16Number*)dst = CHANGE_ENDIAN(i); } @@ -243,7 +243,7 @@ void fromHLFto8(void* dst, const void* src) { #ifndef CMS_NO_HALF_SUPPORT cmsFloat32Number n = _cmsHalf2Float(*(cmsUInt16Number*)src); - *(cmsUInt8Number*)dst = _cmsQuickSaturateByte(n * 255.0f); + *(cmsUInt8Number*)dst = _cmsQuickSaturateByte(n * 255.0); #else cmsUNUSED_PARAMETER(dst); cmsUNUSED_PARAMETER(src); @@ -256,7 +256,7 @@ void fromHLFto16(void* dst, const void* src) { #ifndef CMS_NO_HALF_SUPPORT cmsFloat32Number n = _cmsHalf2Float(*(cmsUInt16Number*)src); - *(cmsUInt16Number*)dst = _cmsQuickSaturateWord(n * 65535.0f); + *(cmsUInt16Number*)dst = _cmsQuickSaturateWord(n * 65535.0); #else cmsUNUSED_PARAMETER(dst); cmsUNUSED_PARAMETER(src); @@ -268,7 +268,7 @@ void fromHLFto16SE(void* dst, const void* src) { #ifndef CMS_NO_HALF_SUPPORT cmsFloat32Number n = _cmsHalf2Float(*(cmsUInt16Number*)src); - cmsUInt16Number i = _cmsQuickSaturateWord(n * 65535.0f); + cmsUInt16Number i = _cmsQuickSaturateWord(n * 65535.0); *(cmsUInt16Number*)dst = CHANGE_ENDIAN(i); #else cmsUNUSED_PARAMETER(dst); diff --git a/src/cmsvirt.c b/src/cmsvirt.c index 6ab820b..b2adb97 100644 --- a/src/cmsvirt.c +++ b/src/cmsvirt.c @@ -368,7 +368,7 @@ int InkLimitingSampler(CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUI InkLimit = (InkLimit * 655.35); - SumCMY = In[0] + In[1] + In[2]; + SumCMY = (cmsFloat64Number) In[0] + In[1] + In[2]; SumCMYK = SumCMY + In[3]; if (SumCMYK > InkLimit) { |