@cryptotaxi247 / netdata-1 / commits / 021baa1ba

escape chart titles to have proper JSON formatted output; fixes #1390

Costa Tsaousis (ktsaou) committed Dec 16, 2016 at 21:56 UTC 021baa1ba39a83d4c572e5a0a35712390ec013c5
3 files changed +20 -1
src/common.c
+15
@@ -197,6 +197,21 @@ void freez(void *ptr) {
197 free(ptr);
198 }
199
200 +void json_escape_string(char *dst, const char *src, size_t size) {
201 + const char *t;
202 + char *d = dst, *e = &dst[size - 1];
203 +
204 + for(t = src; *t && d < e ;t++) {
205 + if(unlikely(*t == '\\' || *t == '"')) {
206 + if(unlikely(d + 1 >= e)) break;
207 + *d++ = '\\';
208 + }
209 + *d++ = *t;
210 + }
211 +
212 + *d = '\0';
213 +}
214 +
215 int sleep_usec(usec_t usec) {
216
217 #ifndef NETDATA_WITH_USLEEP
src/common.h
+2
@@ -181,6 +181,8 @@ extern void *reallocz(void *ptr, size_t size);
181 extern void freez(void *ptr);
182 #endif
183
184 +extern void json_escape_string(char *dst, const char *src, size_t size);
185 +
186 extern void *mymmap(const char *filename, size_t size, int flags, int ksm);
187 extern int savememory(const char *filename, void *mem, size_t size);
188
src/rrd.c
+3 -1
@@ -609,8 +609,10 @@ RRDSET *rrdset_create(const char *type, const char *id, const char *name, const
609
610 {
611 char varvalue[CONFIG_MAX_VALUE + 1];
612 + char varvalue2[CONFIG_MAX_VALUE + 1];
613 snprintfz(varvalue, CONFIG_MAX_VALUE, "%s (%s)", title?title:"", st->name);
613 - st->title = config_get(st->id, "title", varvalue);
614 + json_escape_string(varvalue2, varvalue, sizeof(varvalue2));
615 + st->title = config_get(st->id, "title", varvalue2);
616 }
617
618 st->rrdfamily = rrdfamily_create(st->family);