On Fri, Jun 17, 2022 at 01:16:08PM +0200, Morten Brørup wrote: > > From: Chengwen Feng [mailto:fengcheng...@huawei.com] > > Sent: Friday, 17 June 2022 11.46 > > > > This patch supports escape special characters (including: \",\\,/,\b, > > /f,/n,/r,/t) when telemetry string. > > This patch is used to support telemetry xxx-dump commands which the > > string may include special characters. > > > > Signed-off-by: Chengwen Feng <fengcheng...@huawei.com> > > --- > > lib/telemetry/telemetry.c | 96 +++++++++++++++++++++++++++++++++++++-- > > 1 file changed, 93 insertions(+), 3 deletions(-) > > > > diff --git a/lib/telemetry/telemetry.c b/lib/telemetry/telemetry.c > > index c6fd03a5ab..0f762f633e 100644 > > --- a/lib/telemetry/telemetry.c > > +++ b/lib/telemetry/telemetry.c > > @@ -215,6 +215,94 @@ container_to_json(const struct rte_tel_data *d, > > char *out_buf, size_t buf_len) > > return used; > > } > > > > +static bool > > +json_is_special_char(char ch) > > +{ > > + static unsigned char is_spec[256] = { 0 }; > > + static bool init_once; > > + > > + if (!init_once) { > > + is_spec['\"'] = 1; > > + is_spec['\\'] = 1; > > + is_spec['/'] = 1; > > + is_spec['\b'] = 1; > > + is_spec['\f'] = 1; > > + is_spec['\n'] = 1; > > + is_spec['\r'] = 1; > > + is_spec['\t'] = 1; > > + init_once = true; > > + } > > + > > + return (bool)is_spec[(unsigned char)ch]; > > +}
According to the json spec at [1], the characters that need to be escaped are: a) any characters <0x20 b) inverted commas/quote character \" c) the "reverse solidus character", better known to you and I as the back-slash. Therefore, I think this table generation could be simplified, but also expanded using this. For completeness we should also see about handling all control characters if they are encountered. [1] https://www.rfc-editor.org/rfc/rfc8259.txt /Bruce