Skip to content

Commit c4dc95c

Browse files
authored
Fix number parsing for glz::raw_json (#1432)
1 parent cd0317e commit c4dc95c

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

include/glaze/json/read.hpp

+6-1
Original file line numberDiff line numberDiff line change
@@ -1193,7 +1193,12 @@ namespace glz
11931193
GLZ_ALWAYS_INLINE static void op(auto&& value, is_context auto&& ctx, auto&& it, auto&& end)
11941194
{
11951195
auto it_start = it;
1196-
skip_value<JSON>::op<Opts>(ctx, it, end);
1196+
if (is_digit(uint8_t(*it))) {
1197+
skip_number<Opts>(ctx, it, end);
1198+
}
1199+
else {
1200+
skip_value<JSON>::op<Opts>(ctx, it, end);
1201+
}
11971202
if (bool(ctx.error)) [[unlikely]]
11981203
return;
11991204
value.str = {it_start, static_cast<size_t>(it - it_start)};

tests/json_test/json_test.cpp

+8-2
Original file line numberDiff line numberDiff line change
@@ -3121,16 +3121,22 @@ suite raw_json_tests = [] {
31213121
std::string s;
31223122
expect(not glz::write_json(v, s));
31233123
expect(s == R"([0,1,2])");
3124-
expect(glz::read_json(v, s) == glz::error_code::none);
3124+
expect(not glz::read_json(v, s));
31253125
};
31263126
"raw_json_view_read"_test = [] {
31273127
std::vector<glz::raw_json_view> v{};
31283128
std::string s = R"([0,1,2])";
3129-
expect(glz::read_json(v, s) == glz::error_code::none);
3129+
expect(not glz::read_json(v, s));
31303130
expect(v[0].str == "0");
31313131
expect(v[1].str == "1");
31323132
expect(v[2].str == "2");
31333133
};
3134+
"glz::raw_json"_test = [] {
3135+
glz::raw_json v{};
3136+
std::string s = R"(12345678)";
3137+
expect(not glz::read_json(v, s));
3138+
expect(v.str == "12345678");
3139+
};
31343140
};
31353141

31363142
suite json_helpers = [] {

0 commit comments

Comments
 (0)