blobmsg_json: do not corrupt UTF-8 strings
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
This commit is contained in:
parent
7c5d2b3081
commit
6f192a6fb0
1 changed files with 5 additions and 4 deletions
|
@ -151,11 +151,12 @@ static void add_separator(struct strbuf *s)
|
||||||
|
|
||||||
static void blobmsg_format_string(struct strbuf *s, const char *str)
|
static void blobmsg_format_string(struct strbuf *s, const char *str)
|
||||||
{
|
{
|
||||||
const char *p, *last = str, *end = str + strlen(str);
|
const unsigned char *p, *last, *end;
|
||||||
char buf[8] = "\\u00";
|
char buf[8] = "\\u00";
|
||||||
|
|
||||||
|
end = (unsigned char *) str + strlen(str);
|
||||||
blobmsg_puts(s, "\"", 1);
|
blobmsg_puts(s, "\"", 1);
|
||||||
for (p = str; *p; p++) {
|
for (p = (unsigned char *) str, last = p; *p; p++) {
|
||||||
char escape = '\0';
|
char escape = '\0';
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
|
@ -187,7 +188,7 @@ static void blobmsg_format_string(struct strbuf *s, const char *str)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (p > last)
|
if (p > last)
|
||||||
blobmsg_puts(s, last, p - last);
|
blobmsg_puts(s, (char *) last, p - last);
|
||||||
last = p + 1;
|
last = p + 1;
|
||||||
buf[1] = escape;
|
buf[1] = escape;
|
||||||
|
|
||||||
|
@ -200,7 +201,7 @@ static void blobmsg_format_string(struct strbuf *s, const char *str)
|
||||||
blobmsg_puts(s, buf, len);
|
blobmsg_puts(s, buf, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
blobmsg_puts(s, last, end - last);
|
blobmsg_puts(s, (char *) last, end - last);
|
||||||
blobmsg_puts(s, "\"", 1);
|
blobmsg_puts(s, "\"", 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue