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