[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