]> git.ipfire.org Git - thirdparty/collectd.git/commitdiff
write_riemann plugin: Terminate `riemann_event_set` arguments with `RIEMANN_EVENT_FIE... 4232/head
authorFlorian Forster <octo@collectd.org>
Thu, 11 Jan 2024 19:35:30 +0000 (20:35 +0100)
committerFlorian Forster <octo@collectd.org>
Thu, 11 Jan 2024 19:42:35 +0000 (20:42 +0100)
`riemann_event_set` is a variadic function, that means it accepts a variable
number of arguments. That means it needs some way to determine – at runtime
– how many arguments there are. It appears to be doing so by using
`RIEMANN_EVENT_FIELD_NONE` to indicate the last element in the argument
list. Unfortunately I was unable to find the library's documentation and
code and could not verify this.

That means that the argument list passed to `riemann_event_set` was not
always terminated, causing it to read past where it was supposed to and
adding random crap into the message it crafted.

Issue: #4050

src/write_riemann.c

index 20e5dc2435cc4041d9417e6b1c489773063d1c22..5e5cef396bc21449d2eef8beb4653822e11e7cf5 100644 (file)
@@ -214,7 +214,7 @@ static riemann_message_t *wrr_notification_to_message(notification_t const *n) {
 
 #if RCC_VERSION_NUMBER >= 0x010A00
   riemann_event_set(event, RIEMANN_EVENT_FIELD_TIME_MICROS,
-                    (int64_t)CDTIME_T_TO_US(n->time));
+                    (int64_t)CDTIME_T_TO_US(n->time), RIEMANN_EVENT_FIELD_NONE);
 #endif
 
   if (n->host[0] != 0)
@@ -315,7 +315,8 @@ wrr_value_to_event(struct riemann_host const *host, /* {{{ */
 
 #if RCC_VERSION_NUMBER >= 0x010A00
   riemann_event_set(event, RIEMANN_EVENT_FIELD_TIME_MICROS,
-                    (int64_t)CDTIME_T_TO_US(vl->time));
+                    (int64_t)CDTIME_T_TO_US(vl->time),
+                    RIEMANN_EVENT_FIELD_NONE);
 #endif
 
   if (host->check_thresholds) {