From: Piotr Kosko/Native/Web API (PLT) /SRPOL/Engineer/Samsung Electronics
Date: Thu, 28 Jan 2021 09:57:03 +0000 (+0100)
Subject: [Common] Fixed invalid parsing of decimal values
X-Git-Tag: submit/tizen_6.0/20210128.113333^0
X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2f643f3e9317054db26684af2186243fce92d203;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git
[Common] Fixed invalid parsing of decimal values
[Bug] Decimal values fails to parse properly when locale of device
was e.g. Deutsch
[Verification]
//Below code works well for locales: English, Deutsch, Francais
// sound values are changing and show aproximately same values
// (depending on platform adjustments)
tizen.sound.setVolume("MEDIA", 0.1);
console.log(tizen.sound.getVolume("MEDIA"))
>> 0.13
Change-Id: Icde211bcfcc66cf0d66852816d2a00907adf4571
---
diff --git a/src/common/extension.cc b/src/common/extension.cc
index 6a0a2c3..a85ad0f 100644
--- a/src/common/extension.cc
+++ b/src/common/extension.cc
@@ -350,7 +350,7 @@ void ParsedInstance::HandleMessage(const char* msg, bool is_sync) {
std::string err;
picojson::parse(value, msg, msg + strlen(msg), &err);
if (!err.empty()) {
- LoggerE("Ignoring message, error: %s", err.c_str());
+ LoggerE("Ignoring message:\"%s\", error: %s", msg, err.c_str());
return;
}
diff --git a/src/common/picojson.h b/src/common/picojson.h
index c6b9ade..54a40a7 100644
--- a/src/common/picojson.h
+++ b/src/common/picojson.h
@@ -916,7 +916,9 @@ inline bool _parse(Context &ctx, input &in) {
}
}
#endif
- f = strtod(num_str.c_str(), &endp);
+ locale_t loc = newlocale(LC_NUMERIC_MASK, "C", (locale_t) 0);
+ f = strtod_l(num_str.c_str(), &endp, loc);
+ freelocale(loc);
if (endp == num_str.c_str() + num_str.size()) {
ctx.set_number(f);
return true;