X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=src%2FScripting%2Fnasal-props.cxx;h=214cc5c9a4065e0add761112fbb15689dbfb8df9;hb=6dc891de3475d165489d7287f6f8467eded7e05c;hp=9f309903a11b7401a2b7992a49926bd53da9ab89;hpb=50c1fe2d3e8bbfdb54873b213eb3a148cfa1f00d;p=flightgear.git diff --git a/src/Scripting/nasal-props.cxx b/src/Scripting/nasal-props.cxx index 9f309903a..214cc5c9a 100644 --- a/src/Scripting/nasal-props.cxx +++ b/src/Scripting/nasal-props.cxx @@ -169,7 +169,16 @@ static naRef f_getValue(naContext c, naRef me, int argc, naRef* args) case props::BOOL: case props::INT: case props::LONG: case props::FLOAT: case props::DOUBLE: - return naNum((*node)->getDoubleValue()); + { + double dv = (*node)->getDoubleValue(); + if (osg::isNaN(dv)) { + SG_LOG(SG_GENERAL, SG_ALERT, "Nasal getValue: property " << (*node)->getPath() << " is NaN"); + return naNil(); + } + + return naNum(dv); + } + case props::STRING: case props::UNSPECIFIED: return NASTR((*node)->getStringValue()); @@ -217,7 +226,13 @@ static naRef f_setValue(naContext c, naRef me, int argc, naRef* args) naRef n = naNumValue(val); if(naIsNil(n)) naRuntimeError(c, "props.setValue() with non-number"); - result = (*node)->setDoubleValue(naNumValue(val).num); + + double d = naNumValue(val).num; + if (osg::isNaN(d)) { + naRuntimeError(c, "props.setValue() passed a NaN"); + } + + result = (*node)->setDoubleValue(d); } return naNum(result); } @@ -250,8 +265,13 @@ static naRef f_setDoubleValue(naContext c, naRef me, int argc, naRef* args) { NODEARG(); naRef r = naNumValue(naVec_get(argv, 0)); - if(naIsNil(r)) + if (naIsNil(r)) naRuntimeError(c, "props.setDoubleValue() with non-number"); + + if (osg::isNaN(r.num)) { + naRuntimeError(c, "props.setDoubleValue() passed a NaN"); + } + return naNum((*node)->setDoubleValue(r.num)); }