]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
stats: metrics - Sanitize sub_name before appending to ostream
authorAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 22 Apr 2020 11:49:30 +0000 (14:49 +0300)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 22 Apr 2020 13:21:36 +0000 (16:21 +0300)
src/stats/client-reader.c

index af75fc951655fe070b92fb496cabc7bd72675235..0ad6d196317b34da71b7a11e90a6cf3b8900ca3b 100644 (file)
@@ -76,6 +76,23 @@ static void reader_client_dump_metric(string_t *str, const struct metric *metric
        str_append_c(str, '\n');
 }
 
+static void
+reader_client_append_sub_name(string_t *str, const char *sub_name)
+{
+       for (; *sub_name != '\0'; sub_name++) {
+               switch (*sub_name) {
+               case '\t':
+               case '\n':
+               case '\r':
+               case ' ':
+                       str_append_c(str, '_');
+                       break;
+               default:
+                       str_append_c(str, *sub_name);
+               }
+       }
+}
+
 static void
 reader_client_dump_sub_metrics(struct ostream *output, const struct metric *metric,
                               const char *sub_name, const char *const *fields)
@@ -85,13 +102,13 @@ reader_client_dump_sub_metrics(struct ostream *output, const struct metric *metr
        if (!array_is_created(&metric->sub_metrics))
                return;
        string_t *str = t_str_new(128);
-       str_append_tabescaped(str, sub_name);
+       reader_client_append_sub_name(str, sub_name);
        str_append_c(str, '_');
        root_pos = str->used;
 
        array_foreach(&metric->sub_metrics, sub_metrics) {
                str_truncate(str, root_pos);
-               str_append_tabescaped(str, (*sub_metrics)->sub_name);
+               reader_client_append_sub_name(str, (*sub_metrics)->sub_name);
                name_pos = str->used;
                reader_client_dump_metric(str, *sub_metrics, fields);
                o_stream_nsend(output, str_data(str), str_len(str));