blobmsg_json: do not corrupt UTF-8 strings

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
This commit is contained in:
Felix Fietkau 2013-06-21 17:19:37 +02:00
parent 7c5d2b3081
commit 6f192a6fb0

View file

@ -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);
} }