snac2

Fork of https://codeberg.org/grunfink/snac2
git clone https://git.inz.fi/snac2
Log | Files | Refs | README | LICENSE

commit 2250ad702723a50afd93def3735fcfe854701aa3
parent 23177e93954951a85af85d579db269372c9eae93
Author: default <nobody@localhost>
Date:   Tue,  7 Mar 2023 09:56:16 +0100

Sanitize control codes in JSON code.

Diffstat:
Mformat.c | 9+--------
Mxs_json.h | 4++++
2 files changed, 5 insertions(+), 8 deletions(-)

diff --git a/format.c b/format.c @@ -179,15 +179,8 @@ d_char *sanitize(const char *content) xs *sl; int n = 0; char *p, *v; - xs *content2 = xs_dup(content); - /* strip dangerous control codes */ - for (n = 0; content2[n]; n++) { - if (xs_type(&content2[n]) != XSTYPE_STRING) - content2[n] = ' '; - } - - sl = xs_regex_split(content2, "</?[^>]+>"); + sl = xs_regex_split(content, "</?[^>]+>"); p = sl; diff --git a/xs_json.h b/xs_json.h @@ -260,6 +260,10 @@ static xs_val *_xs_json_loads_lexer(const char **json, js_type *t) else cp = i; + /* replace dangerous control codes with the replacement char */ + if (cp >= '\0' && cp < ' ' && !strchr("\r\n\t", cp)) + cp = 0xfffd; + v = xs_utf8_enc(v, cp); c = '\0';