From: Stephen Hemminger Date: Fri, 10 Apr 2026 22:38:36 +0000 (-0700) Subject: json_writer: support control character escaping X-Git-Tag: v7.0.0~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9e99260759b7bb1970745047f6f48bb80e64f2f3;p=thirdparty%2Fiproute2.git json_writer: support control character escaping Iproute2 never handled control characters in strings correctly. There are some cases like where string is under user control like paths in ss command. Make iproute2 json output conform to RFC 8259. Signed-off-by: Stephen Hemminger --- diff --git a/lib/json_writer.c b/lib/json_writer.c index 2f3936c2..7202621e 100644 --- a/lib/json_writer.c +++ b/lib/json_writer.c @@ -53,7 +53,7 @@ static void jsonw_eor(json_writer_t *self) /* Output JSON encoded string */ -/* Handles C escapes, does not do Unicode */ +/* Handles C escapes and control characters per RFC 8259 */ static void jsonw_puts(json_writer_t *self, const char *str) { putc('"', self->out); @@ -81,7 +81,10 @@ static void jsonw_puts(json_writer_t *self, const char *str) fputs("\\\"", self->out); break; default: - putc(*str, self->out); + if ((unsigned char)*str < 0x20 || *str == 0x7f) + fprintf(self->out, "\\u%04x", *str); + else + putc(*str, self->out); } putc('"', self->out); }