]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-master, stats: Fix sending and parsing UPDATE commands release-2.3.13 2.3.13
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 22 Dec 2020 08:22:38 +0000 (10:22 +0200)
committerTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 22 Dec 2020 11:55:34 +0000 (13:55 +0200)
These commands were parsed completely wrong, resulting in errors like:

Client sent invalid input for UPDATE: Invalid tv_created: Invalid timeval microseconds parameter

src/lib-master/stats-client.c
src/lib-master/test-event-stats.c
src/stats/client-writer.c

index 8a43f86c5939365120c0b423fd9108c4e615dc27..0e95ab0b78c4af95355ae02a6be02823a996b921 100644 (file)
@@ -164,6 +164,7 @@ stats_event_write(struct event *event, const struct failure_context *ctx,
 {
        struct event *merged_event;
        struct event *parent_event;
+       bool update = FALSE;
 
        merged_event = begin ? event_ref(event) : event_minimize(event);
        parent_event = merged_event->parent;
@@ -176,16 +177,17 @@ stats_event_write(struct event *event, const struct failure_context *ctx,
        }
        if (begin) {
                i_assert(event == merged_event);
-               const char *cmd = event->sent_to_stats_id == 0 ?
-                       "BEGIN" : "UPDATE";
+               update = (event->sent_to_stats_id != 0);
+               const char *cmd = !update ? "BEGIN" : "UPDATE";
                str_printfa(str, "%s\t%"PRIu64"\t", cmd, event->id);
                event->sent_to_stats_id = event->change_id;
        } else {
                str_append(str, "EVENT\t");
        }
-       str_printfa(str, "%"PRIu64"\t%u\t",
-                   parent_event == NULL ? 0 : parent_event->id,
-                   ctx->type);
+       str_printfa(str, "%"PRIu64"\t",
+                   parent_event == NULL ? 0 : parent_event->id);
+       if (!update)
+               str_printfa(str, "%u\t", ctx->type);
        event_export(merged_event, str);
        str_append_c(str, '\n');
        event_unref(&merged_event);
index ecf7dcd9630ad7905b148c14345e0786afad9d08..7d2115429559dba440dcdcc6c38b8f029bd1e9de 100644 (file)
@@ -589,7 +589,7 @@ static void test_parent_update_post_send(void)
                        "       stest-event-stats.c     %d"
                        "       l1      0       ctest2" "       Ib      2\n"
                        /* second e_info() */
-                       "UPDATE %"PRIu64"       0       1       0       0"
+                       "UPDATE %"PRIu64"       0       0       0"
                        "       stest-event-stats.c     %d      ctest1"
                        "       Ia      1000\n"
                        "BEGIN  %"PRIu64"       %"PRIu64"       1       0       0"
index bf3f621a0976886e6834cd4baf16921bc6ff14df..40795687547da68c827378a8f486d22c22d2c574 100644 (file)
@@ -206,7 +206,7 @@ writer_client_input_event_update(struct writer_client *client,
                *error_r = "Event unexpectedly changed parent";
                return FALSE;
        }
-       return event_import_unescaped(stats_event->event, args, error_r);
+       return event_import_unescaped(stats_event->event, args+2, error_r);
 }
 
 static bool