sc/source/core/tool/interpr4.cxx | 84 ++++++++++++++++++++++++++------------- 1 file changed, 57 insertions(+), 27 deletions(-)
New commits: commit 835fa9bd687518f44465cb22348a13984cdf779d Author: Eike Rathke <er...@redhat.com> Date: Fri Jul 1 11:39:19 2016 +0200 no need to check twice Change-Id: Iad2942851fced632c0c662bf754b1d687740105c diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx index f57a970..9245ff7 100644 --- a/sc/source/core/tool/interpr4.cxx +++ b/sc/source/core/tool/interpr4.cxx @@ -2097,13 +2097,22 @@ sal_Int32 ScInterpreter::GetInt32() { double fVal = GetDouble(); if (fVal > 0.0) + { fVal = rtl::math::approxFloor( fVal); + if (fVal > SAL_MAX_INT32) + { + SetError( errIllegalArgument); + return SAL_MAX_INT32; + } + } else if (fVal < 0.0) - fVal = rtl::math::approxCeil( fVal); - if (fVal < SAL_MIN_INT32 || fVal > SAL_MAX_INT32) { - SetError( errIllegalArgument); - return SAL_MAX_INT32; + fVal = rtl::math::approxCeil( fVal); + if (fVal < SAL_MIN_INT32) + { + SetError( errIllegalArgument); + return SAL_MAX_INT32; + } } return static_cast<sal_Int32>(fVal); } @@ -2112,13 +2121,22 @@ sal_Int32 ScInterpreter::GetInt32WithDefault( sal_Int32 nDefault ) { double fVal = GetDoubleWithDefault( nDefault); if (fVal > 0.0) + { fVal = rtl::math::approxFloor( fVal); + if (fVal > SAL_MAX_INT32) + { + SetError( errIllegalArgument); + return SAL_MAX_INT32; + } + } else if (fVal < 0.0) - fVal = rtl::math::approxCeil( fVal); - if (fVal < SAL_MIN_INT32 || fVal > SAL_MAX_INT32) { - SetError( errIllegalArgument); - return SAL_MAX_INT32; + fVal = rtl::math::approxCeil( fVal); + if (fVal < SAL_MIN_INT32) + { + SetError( errIllegalArgument); + return SAL_MAX_INT32; + } } return static_cast<sal_Int32>(fVal); } @@ -2127,13 +2145,22 @@ sal_Int16 ScInterpreter::GetInt16() { double fVal = GetDouble(); if (fVal > 0.0) + { fVal = rtl::math::approxFloor( fVal); + if (fVal > SAL_MAX_INT16) + { + SetError( errIllegalArgument); + return SAL_MAX_INT16; + } + } else if (fVal < 0.0) - fVal = rtl::math::approxCeil( fVal); - if (fVal < SAL_MIN_INT16 || fVal > SAL_MAX_INT16) { - SetError( errIllegalArgument); - return SAL_MAX_INT16; + fVal = rtl::math::approxCeil( fVal); + if (fVal < SAL_MIN_INT16) + { + SetError( errIllegalArgument); + return SAL_MAX_INT16; + } } return static_cast<sal_Int16>(fVal); } commit f45a78ac585b847c64c4bb78436f895b243ca2f6 Author: Eike Rathke <er...@redhat.com> Date: Fri Jul 1 11:27:24 2016 +0200 use GetInt32() for integer Add-In parameters Change-Id: Id62acb1800b3a302d62900699a01d1a5cdf1ab56 diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx index dd05982..f57a970 100644 --- a/sc/source/core/tool/interpr4.cxx +++ b/sc/source/core/tool/interpr4.cxx @@ -2639,13 +2639,9 @@ void ScInterpreter::ScExternal() { case SC_ADDINARG_INTEGER: { - double fVal = GetDouble(); - double fInt = (fVal >= 0.0) ? ::rtl::math::approxFloor( fVal ) : - ::rtl::math::approxCeil( fVal ); - if ( fInt >= LONG_MIN && fInt <= LONG_MAX ) - aParam <<= (sal_Int32)fInt; - else - SetError(errIllegalArgument); + sal_Int32 nVal = GetInt32(); + if (!nGlobalError) + aParam <<= nVal; } break; @@ -2664,18 +2660,13 @@ void ScInterpreter::ScExternal() case svString: case svSingleRef: { - double fVal = GetDouble(); - double fInt = (fVal >= 0.0) ? ::rtl::math::approxFloor( fVal ) : - ::rtl::math::approxCeil( fVal ); - if ( fInt >= LONG_MIN && fInt <= LONG_MAX ) + sal_Int32 nVal = GetInt32(); + if (!nGlobalError) { - sal_Int32 nIntVal = (long)fInt; - uno::Sequence<sal_Int32> aInner( &nIntVal, 1 ); + uno::Sequence<sal_Int32> aInner( &nVal, 1 ); uno::Sequence< uno::Sequence<sal_Int32> > aOuter( &aInner, 1 ); aParam <<= aOuter; } - else - SetError(errIllegalArgument); } break; case svDoubleRef: commit 415cd81d90aa5dd4f9a5d914fabd4c2371f53e4c Author: Eike Rathke <er...@redhat.com> Date: Fri Jul 1 11:01:10 2016 +0200 let GetInt*() truncate to integer towards 0 like it should always had been the case ... Change-Id: I75b9e71bbaad5e356a45b416a3b42dc4becec801 diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx index 1421f87..dd05982 100644 --- a/sc/source/core/tool/interpr4.cxx +++ b/sc/source/core/tool/interpr4.cxx @@ -2095,7 +2095,11 @@ double ScInterpreter::GetDoubleWithDefault(double nDefault) sal_Int32 ScInterpreter::GetInt32() { - double fVal = rtl::math::approxFloor( GetDouble()); + double fVal = GetDouble(); + if (fVal > 0.0) + fVal = rtl::math::approxFloor( fVal); + else if (fVal < 0.0) + fVal = rtl::math::approxCeil( fVal); if (fVal < SAL_MIN_INT32 || fVal > SAL_MAX_INT32) { SetError( errIllegalArgument); @@ -2106,7 +2110,11 @@ sal_Int32 ScInterpreter::GetInt32() sal_Int32 ScInterpreter::GetInt32WithDefault( sal_Int32 nDefault ) { - double fVal = rtl::math::approxFloor( GetDoubleWithDefault( nDefault)); + double fVal = GetDoubleWithDefault( nDefault); + if (fVal > 0.0) + fVal = rtl::math::approxFloor( fVal); + else if (fVal < 0.0) + fVal = rtl::math::approxCeil( fVal); if (fVal < SAL_MIN_INT32 || fVal > SAL_MAX_INT32) { SetError( errIllegalArgument); @@ -2117,7 +2125,11 @@ sal_Int32 ScInterpreter::GetInt32WithDefault( sal_Int32 nDefault ) sal_Int16 ScInterpreter::GetInt16() { - double fVal = rtl::math::approxFloor( GetDouble()); + double fVal = GetDouble(); + if (fVal > 0.0) + fVal = rtl::math::approxFloor( fVal); + else if (fVal < 0.0) + fVal = rtl::math::approxCeil( fVal); if (fVal < SAL_MIN_INT16 || fVal > SAL_MAX_INT16) { SetError( errIllegalArgument); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits