]> Git Repo - VerusCoin.git/commitdiff
util: use locale-independent parsing in ParseDouble
authorWladimir J. van der Laan <[email protected]>
Sat, 18 Jul 2015 06:16:21 +0000 (08:16 +0200)
committerJack Grigg <[email protected]>
Fri, 10 Feb 2017 02:19:02 +0000 (02:19 +0000)
Use locale-indepent C++ based parsing instead of C's strtod,
which checks for different input based on the user's locale.
Fixes #6443.

src/utilstrencodings.cpp

index 14482c996d285a07796bd850a7c741ac51baf343..142d5a4eb803b74925a10efc95ac66c652e9ac04 100644 (file)
@@ -480,11 +480,12 @@ bool ParseDouble(const std::string& str, double *out)
         return false;
     if (str.size() >= 2 && str[0] == '0' && str[1] == 'x') // No hexadecimal floats allowed
         return false;
-    char *endp = NULL;
-    errno = 0; // strtod will not set errno if valid
-    double n = strtod(str.c_str(), &endp);
-    if(out) *out = n;
-    return endp && *endp == 0 && !errno;
+    std::istringstream text(str);
+    text.imbue(std::locale::classic());
+    double result;
+    text >> result;
+    if(out) *out = result;
+    return text.eof() && !text.fail();
 }
 
 std::string FormatParagraph(const std::string in, size_t width, size_t indent)
This page took 0.023685 seconds and 4 git commands to generate.