summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarti Maria <marti.maria@littlecms.com>2022-01-23 15:48:03 +0100
committerMarti Maria <marti.maria@littlecms.com>2022-01-23 15:48:03 +0100
commitca7d833d54c164311d32cf842b6e08216cf1467c (patch)
tree24d31630d4bdb0614eea0c790ee67fea53372d09
parentda3da4bca90ef9ad10f9e2e5a3452a680a66c979 (diff)
downloadlcms2-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.
-rw-r--r--src/cmsalpha.c12
-rw-r--r--src/cmsvirt.c2
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) {