From cba368128db6de7d390b9a6569bc36a99e599eac Mon Sep 17 00:00:00 2001 From: hummypkg Date: Wed, 13 Mar 2013 21:41:06 +0000 Subject: [PATCH] fix JSON --- main.c | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/main.c b/main.c index 6963cb2..9ffcbcc 100644 --- a/main.c +++ b/main.c @@ -188,6 +188,25 @@ sql_escape_len(unsigned int len, char *txt) return buf; } +static char * +json_escape_len(unsigned int len, char *txt) +{ + static char buf[0x1000]; + char *p; + unsigned int i; + + p = buf; + for (i = 0; i < len && *txt; i++) + { + if (*txt == '"') + *p++ = '\\'; + *p++ = *txt++; + } + *p = '\0'; + + return buf; +} + #ifdef HAVE_SQLITE3 #define EXEC(xx) if (sqlite3_exec(db, xx, NULL, NULL, &error) != SQLITE_OK) \ @@ -376,18 +395,21 @@ json(struct epg *epg __attribute__((unused)), DECOMPRESS(d->content.d77.name, d->content.d77.namelen); DECOMPRESS(d->content.d77.text, d->content.d77.textlen); - printf(",\n \"name\": \"%.*s\"", - d->content.d77.namelen, d->content.d77.name); - printf(",\n \"text\": \"%.*s\"", - d->content.d77.textlen, d->content.d77.text); + printf(",\n \"name\": \"%s\"", + json_escape_len(d->content.d77.namelen, + d->content.d77.name)); + printf(",\n \"text\": \"%s\"", + json_escape_len(d->content.d77.textlen, + d->content.d77.text)); } if (ds[PARSER_USER_DEFINED]) { struct descriptor *d = ds[PARSER_USER_DEFINED]; DECOMPRESS(d->content.d137.warning, d->content.d137.warninglen); - printf(",\n \"warning\": \"%.*s\"", - d->content.d137.warninglen, d->content.d137.warning); + printf(",\n \"warning\": \"%s\"", + json_escape_len(d->content.d137.warninglen, + d->content.d137.warning)); } if (ds[PARSER_CONTENT]) {