From 47f4cfe677bcd8b3372ddbf09751cd023f3ad9ff Mon Sep 17 00:00:00 2001 From: Claudius 'keldu' Holeksa Date: Fri, 16 Aug 2024 13:41:54 +0200 Subject: Json decoding for booleans --- modules/codec-json/c++/json.tmpl.hpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/modules/codec-json/c++/json.tmpl.hpp b/modules/codec-json/c++/json.tmpl.hpp index 6193e3f..36f14de 100644 --- a/modules/codec-json/c++/json.tmpl.hpp +++ b/modules/codec-json/c++/json.tmpl.hpp @@ -546,8 +546,26 @@ struct json_decode { using Schema = schema::Bool; static error_or decode(buffer_view& buff, data& to){ + SAW_ASSERT(buff.read() == 't' || buff.read() == 'f'){ + return make_error("Invalid JSON boolean"); + } + + bool assumption = (buff.read() == 't'); + std::string_view expected_str = assumption ? "true" : "false"; - return make_error(); + if(buff.read_composite_length() < expected_str.size()){ + return make_error(); + } + + for(uint64_t i = 0; i < expected_str.size(); ++i){ + if(buff.read(i) != static_cast(expected_str[i])){ + return make_error("Invalid JSON boolean"); + } + } + + to.set(assumption); + buff.read_advance(expected_str.size()); + return make_void(); } }; -- cgit v1.2.3