]> git.ipfire.org Git - thirdparty/collectd.git/commitdiff
src/daemon/metric.c: Fix memory corruption in `label_set_delete`.
authorFlorian Forster <octo@collectd.org>
Mon, 25 Dec 2023 21:57:10 +0000 (22:57 +0100)
committerFlorian Forster <octo@collectd.org>
Thu, 28 Dec 2023 08:16:11 +0000 (09:16 +0100)
The size parameter passed to `memmove` was in number of pairs, not bytes.

src/daemon/metric.c

index 276f3e50b550a3a58e1bc7d187fc800cc5b309ca..558d5b44263f0b03fad59ba5f6c3561a16f48bff 100644 (file)
@@ -151,9 +151,10 @@ static int label_set_delete(label_set_t *labels, label_pair_t *elem) {
   free(elem->name);
   free(elem->value);
 
-  if (index != (labels->num - 1)) {
+  size_t pairs_to_move = labels->num - (index + 1);
+  if (pairs_to_move != 0) {
     memmove(labels->ptr + index, labels->ptr + (index + 1),
-            labels->num - (index + 1));
+            sizeof(*labels->ptr) * pairs_to_move);
   }
   labels->num--;