open-source-parsers/jsoncpp

Parsing breaks because it is locale sensitive

Open

#439 aperta il 9 mar 2016

Vedi su GitHub
 (7 commenti) (0 reazioni) (0 assegnatari)C++ (2602 fork)batch import
bughelp wanted

Metriche repository

Star
 (7542 star)
Metriche merge PR
 (Merge medio 18h 26m) (10 PR mergiate in 30 g)

Descrizione

I'm seeing this with version 1.6.5 on Ubuntu 16.04 (xenial).

Below is a trivial test program . (It requires the German locale to be installed.)

With the line that sets the locale commented out (assuming your are in a locale that uses '.' as the decimal point), everything works fine. With the locale setting enabled, the call fails and the error message is

'3.14' is not a number.

There is a related discussion in bug #283, but the issue below is different, I believe.

#include <jsoncpp/json/reader.h>
#include <iostream>
#include <locale>

int main(int, char **)
{
    using namespace std;

    locale::global(locale("de_DE.utf8"));

    Json::Value root;
    Json::CharReaderBuilder rbuilder;
    rbuilder["collectComments"] = false;

    string json_string = "3.14";

    unique_ptr<Json::CharReader> reader(rbuilder.newCharReader());
    auto begin = json_string.c_str();
    auto end = json_string.c_str() + json_string.size();
    string errors;
    bool ok = reader->parse(begin, end, &root, &errors);
    if (!ok)
    {
        cerr << errors << endl;
    }
}

Guida contributor