summaryrefslogtreecommitdiff
path: root/src/codec-json/json.tmpl.h
diff options
context:
space:
mode:
authorClaudius "keldu" Holeksa <mail@keldu.de>2023-06-29 20:20:15 +0200
committerClaudius "keldu" Holeksa <mail@keldu.de>2023-06-29 20:20:15 +0200
commit84de66e6147d2fb50f84001a297cf941083849f9 (patch)
tree144e6a6e48a7f0148342278c6045bd724c8b3a82 /src/codec-json/json.tmpl.h
parent140a8861a63dea5c36a3e9d6d19b5382bdd8ddce (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.h24
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);
}