[Libreoffice-commits] core.git: sc/source
Stephan Bergmann
sbergman at redhat.com
Thu Oct 23 06:28:12 PDT 2014
sc/source/filter/excel/xltools.cxx | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
New commits:
commit 413210a5036486dc1777565c3c69b2eda68b3f93
Author: Stephan Bergmann <sbergman at redhat.com>
Date: Thu Oct 23 15:27:37 2014 +0200
Avoid left shift of negative values (ubsan)
Change-Id: Ie4f6a4e3e54770c00741cc268ed9e27ecafac500
diff --git a/sc/source/filter/excel/xltools.cxx b/sc/source/filter/excel/xltools.cxx
index 38b6dd0..3c6d0f2 100644
--- a/sc/source/filter/excel/xltools.cxx
+++ b/sc/source/filter/excel/xltools.cxx
@@ -135,9 +135,10 @@ bool XclTools::GetRKFromDouble( sal_Int32& rnRKValue, double fValue )
fFrac = modf( fValue, &fInt );
if( (fFrac == 0.0) && (fInt >= -536870912.0) && (fInt <= 536870911.0) ) // 2^29
{
- rnRKValue = static_cast< sal_Int32 >( fInt );
- rnRKValue <<= 2;
- rnRKValue |= EXC_RK_INT;
+ rnRKValue
+ = static_cast<sal_Int32>(
+ static_cast<sal_uInt32>(static_cast<sal_Int32>(fInt)) << 2)
+ | EXC_RK_INT;
return true;
}
@@ -145,9 +146,10 @@ bool XclTools::GetRKFromDouble( sal_Int32& rnRKValue, double fValue )
fFrac = modf( fValue * 100.0, &fInt );
if( (fFrac == 0.0) && (fInt >= -536870912.0) && (fInt <= 536870911.0) )
{
- rnRKValue = static_cast< sal_Int32 >( fInt );
- rnRKValue <<= 2;
- rnRKValue |= EXC_RK_INT100;
+ rnRKValue
+ = static_cast<sal_Int32>(
+ static_cast<sal_uInt32>(static_cast<sal_Int32>(fInt)) << 2)
+ | EXC_RK_INT100;
return true;
}
More information about the Libreoffice-commits
mailing list