summaryrefslogtreecommitdiff
path: root/sc/source/filter/excel
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2014-10-23 15:27:37 +0200
committerStephan Bergmann <sbergman@redhat.com>2014-10-23 15:27:37 +0200
commit413210a5036486dc1777565c3c69b2eda68b3f93 (patch)
tree52a8d4cf048d420754c1ac7137a3a6fde02a3fe0 /sc/source/filter/excel
parent1e5d17f821783d0e4a2db92bb09eaff1eadc485a (diff)
Avoid left shift of negative values (ubsan)
Change-Id: Ie4f6a4e3e54770c00741cc268ed9e27ecafac500
Diffstat (limited to 'sc/source/filter/excel')
-rw-r--r--sc/source/filter/excel/xltools.cxx14
1 files changed, 8 insertions, 6 deletions
diff --git a/sc/source/filter/excel/xltools.cxx b/sc/source/filter/excel/xltools.cxx
index 38b6dd07bed9..3c6d0f27e34f 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;
}