Kaydet (Commit) a743b7ca authored tarafından Stephan Bergmann's avatar Stephan Bergmann

ASan: value nan is outside the range of representable values of type 'int'

Change-Id: Icd0a383ddec97c1129a3937fbcd8c9a9e61ff8eb
üst 66576fc1
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include "interpre.hxx" #include "interpre.hxx"
#include <rangelst.hxx> #include <rangelst.hxx>
#include <rtl/math.hxx>
#include <sfx2/app.hxx> #include <sfx2/app.hxx>
#include <sfx2/docfile.hxx> #include <sfx2/docfile.hxx>
#include <sfx2/objsh.hxx> #include <sfx2/objsh.hxx>
...@@ -2096,6 +2097,11 @@ double ScInterpreter::GetDoubleWithDefault(double nDefault) ...@@ -2096,6 +2097,11 @@ double ScInterpreter::GetDoubleWithDefault(double nDefault)
sal_Int32 ScInterpreter::GetInt32() sal_Int32 ScInterpreter::GetInt32()
{ {
double fVal = GetDouble(); double fVal = GetDouble();
if (rtl::math::isNan(fVal))
{
SetError(errIllegalArgument);
return SAL_MAX_INT32;
}
if (fVal > 0.0) if (fVal > 0.0)
{ {
fVal = rtl::math::approxFloor( fVal); fVal = rtl::math::approxFloor( fVal);
...@@ -2120,6 +2126,11 @@ sal_Int32 ScInterpreter::GetInt32() ...@@ -2120,6 +2126,11 @@ sal_Int32 ScInterpreter::GetInt32()
sal_Int32 ScInterpreter::GetInt32WithDefault( sal_Int32 nDefault ) sal_Int32 ScInterpreter::GetInt32WithDefault( sal_Int32 nDefault )
{ {
double fVal = GetDoubleWithDefault( nDefault); double fVal = GetDoubleWithDefault( nDefault);
if (rtl::math::isNan(fVal))
{
SetError(errIllegalArgument);
return SAL_MAX_INT32;
}
if (fVal > 0.0) if (fVal > 0.0)
{ {
fVal = rtl::math::approxFloor( fVal); fVal = rtl::math::approxFloor( fVal);
...@@ -2144,6 +2155,11 @@ sal_Int32 ScInterpreter::GetInt32WithDefault( sal_Int32 nDefault ) ...@@ -2144,6 +2155,11 @@ sal_Int32 ScInterpreter::GetInt32WithDefault( sal_Int32 nDefault )
sal_Int16 ScInterpreter::GetInt16() sal_Int16 ScInterpreter::GetInt16()
{ {
double fVal = GetDouble(); double fVal = GetDouble();
if (rtl::math::isNan(fVal))
{
SetError(errIllegalArgument);
return SAL_MAX_INT16;
}
if (fVal > 0.0) if (fVal > 0.0)
{ {
fVal = rtl::math::approxFloor( fVal); fVal = rtl::math::approxFloor( fVal);
...@@ -2168,7 +2184,7 @@ sal_Int16 ScInterpreter::GetInt16() ...@@ -2168,7 +2184,7 @@ sal_Int16 ScInterpreter::GetInt16()
sal_uInt32 ScInterpreter::GetUInt32() sal_uInt32 ScInterpreter::GetUInt32()
{ {
double fVal = rtl::math::approxFloor( GetDouble()); double fVal = rtl::math::approxFloor( GetDouble());
if (fVal < 0.0 || fVal > SAL_MAX_UINT32) if (rtl::math::isNan(fVal) || fVal < 0.0 || fVal > SAL_MAX_UINT32)
{ {
SetError( errIllegalArgument); SetError( errIllegalArgument);
return SAL_MAX_UINT32; return SAL_MAX_UINT32;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment