Fix yyjson double reading

This commit is contained in:
John Keiser 2021-01-04 12:37:25 -08:00
parent 5add8ac255
commit 25d1c7e622
2 changed files with 25 additions and 3 deletions

View File

@ -7,12 +7,23 @@
namespace kostya {
class yyjson {
public:
simdjson_really_inline double get_double(yyjson_val *obj, std::string_view key) {
yyjson_val *val = yyjson_obj_getn(obj, key.data(), key.length());
return yyjson_get_real(val);
if (yyjson_get_type(val) != YYJSON_TYPE_NUM) { return 0; }
switch (yyjson_get_subtype(val)) {
case YYJSON_SUBTYPE_UINT:
return yyjson_get_uint(val);
case YYJSON_SUBTYPE_SINT:
return yyjson_get_sint(val);
case YYJSON_SUBTYPE_REAL:
return yyjson_get_real(val);
default:
return 0;
}
}
public:
bool run(const simdjson::padded_string &json, std::vector<point> &points) {
yyjson_doc *doc = yyjson_read(json.data(), json.size(), 0);
if (!doc) { return false; }

View File

@ -11,7 +11,18 @@ class yyjson {
simdjson_really_inline double get_double(yyjson_val *obj, std::string_view key) {
yyjson_val *val = yyjson_obj_getn(obj, key.data(), key.length());
return yyjson_get_real(val);
if (yyjson_get_type(val) != YYJSON_TYPE_NUM) { return 0; }
switch (yyjson_get_subtype(val)) {
case YYJSON_SUBTYPE_UINT:
return yyjson_get_uint(val);
case YYJSON_SUBTYPE_SINT:
return yyjson_get_sint(val);
case YYJSON_SUBTYPE_REAL:
return yyjson_get_real(val);
default:
return 0;
}
}
public: