From 1d365fbc1800767128996b415126c343e503f3d3 Mon Sep 17 00:00:00 2001 From: teejusb <5017202+teejusb@users.noreply.github.com> Date: Wed, 8 Apr 2020 22:01:16 -0700 Subject: [PATCH 1/2] Fix float parsing errors --- src/RageUtil.cpp | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/src/RageUtil.cpp b/src/RageUtil.cpp index 24f41b32f0..ae801f501a 100644 --- a/src/RageUtil.cpp +++ b/src/RageUtil.cpp @@ -1877,27 +1877,38 @@ void MakeLower( wchar_t *p, size_t iLen ) float StringToFloat( const RString &sString ) { - RString toTrim = sString; - Trim(toTrim); - if (toTrim.size() == 0) + try { - return 0; + float fOut = std::stof(sString); + if (!isfinite(fOut)) + { + fOut = 0.0f; + } + return fOut; } - return std::stof(toTrim); + catch(...) + { + return 0.0f; + } } bool StringToFloat( const RString &sString, float &fOut ) { - RString toTrim = sString; - Trim(toTrim); - if (toTrim.size() == 0) + try { - return false; + fOut = std::stof(sString); + if (!isfinite(fOut)) + { + fOut = 0.0f; + return false; + } + return true; } - char *endPtr; - - fOut = strtof( toTrim, &endPtr ); - return *endPtr == '\0' && isfinite( fOut ); + catch(...) + { + fOut = 0.0f; + return false; + } } RString FloatToString( const float &num ) From 620ef3609df6f7fe21b6654bbca426cfdd45ef86 Mon Sep 17 00:00:00 2001 From: teejusb <5017202+teejusb@users.noreply.github.com> Date: Wed, 8 Apr 2020 22:41:19 -0700 Subject: [PATCH 2/2] Revert to use std::strtof insted of std::stof to make travis happy --- src/RageUtil.cpp | 34 ++++++++-------------------------- 1 file changed, 8 insertions(+), 26 deletions(-) diff --git a/src/RageUtil.cpp b/src/RageUtil.cpp index ae801f501a..445f4a776d 100644 --- a/src/RageUtil.cpp +++ b/src/RageUtil.cpp @@ -1877,38 +1877,20 @@ void MakeLower( wchar_t *p, size_t iLen ) float StringToFloat( const RString &sString ) { - try + float fOut = std::strtof(sString, nullptr); + if (!isfinite(fOut)) { - float fOut = std::stof(sString); - if (!isfinite(fOut)) - { - fOut = 0.0f; - } - return fOut; + fOut = 0.0f; } - catch(...) - { - return 0.0f; - } + return fOut; } bool StringToFloat( const RString &sString, float &fOut ) { - try - { - fOut = std::stof(sString); - if (!isfinite(fOut)) - { - fOut = 0.0f; - return false; - } - return true; - } - catch(...) - { - fOut = 0.0f; - return false; - } + char *endPtr = nullptr; + + fOut = std::strtof(sString, &endPtr); + return sString.size() && *endPtr == '\0' && isfinite(fOut); } RString FloatToString( const float &num )