diff options
author | Claudius "keldu" Holeksa <mail@keldu.de> | 2023-06-29 20:20:15 +0200 |
---|---|---|
committer | Claudius "keldu" Holeksa <mail@keldu.de> | 2023-06-29 20:20:15 +0200 |
commit | 84de66e6147d2fb50f84001a297cf941083849f9 (patch) | |
tree | 144e6a6e48a7f0148342278c6045bd724c8b3a82 /src/codec-json/json.tmpl.h | |
parent | 140a8861a63dea5c36a3e9d6d19b5382bdd8ddce (diff) |
c++,codec-json: Fixed unicode and control sequence handling
Diffstat (limited to 'src/codec-json/json.tmpl.h')
-rw-r--r-- | src/codec-json/json.tmpl.h | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/src/codec-json/json.tmpl.h b/src/codec-json/json.tmpl.h index 3d3ad91..9a28fe9 100644 --- a/src/codec-json/json.tmpl.h +++ b/src/codec-json/json.tmpl.h @@ -445,11 +445,25 @@ struct json_decode<schema::String, RootSchema, ToDecode> { } } break; case '"': - string_done = true; - break; - default: - iss<<buff.read(); - break; + string_done = true; + break; + default:{ + // Avoids Control sequences + if(buff.read() >= ' ' && buff.read() <= '~'){ + iss<<buff.read(); + } + // Avoid Unicode + else if (buff.read() < 0) { + do { + buff.read_advance(1); + if(buff.read_composite_length() == 0){ + return make_error<err::buffer_exhausted>(); + } + } while( buff.read() < 0 ); + iss<<'?'; + } + break; + } } buff.read_advance(1); } |