Skip to content

Commit 7b9566d

Browse files
authored
Merge pull request #603 from alltilla/metrics-labels-get-crash-fix-2
filterx/metrics_labels: fix crash when getting non-existent label
2 parents 743fc96 + acfc566 commit 7b9566d

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

lib/filterx/object-metrics-labels.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,7 @@ _get_subscript(FilterXDict *s, FilterXObject *key)
8585
if (!filterx_object_extract_string_ref(key, &key_str, NULL))
8686
return NULL;
8787

88-
if (!self->labels->len)
89-
return NULL;
90-
91-
for (guint i = self->labels->len - 1; i >= 0; i--)
88+
for (gssize i = (gssize)(self->labels->len) - 1; i >= 0; i--)
9289
{
9390
StatsClusterLabel *label = &g_array_index(self->labels, StatsClusterLabel, i);
9491
if (strcmp(label->name, key_str) == 0)

tests/light/functional_tests/filterx/test_filterx_funcs.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -503,3 +503,23 @@ def test_unset_empties_replacement_list(config, syslog_ng):
503503

504504
assert file_final.get_stats()["processed"] == 1
505505
assert file_final.read_log() == r"""["do","do","do","do",{"a":{"s":{"d":"do"}}},[["do"]]]"""
506+
507+
508+
def test_metrics_labels_get(config, syslog_ng):
509+
(file_final,) = create_config(
510+
config, r"""
511+
$MSG = {};
512+
513+
labels = metrics_labels();
514+
$MSG.empty_labels_does_not_exist = labels["empty-labels-does-not-exist"] ?? "fallback";
515+
516+
labels["foo"] = "bar";
517+
$MSG.does_not_exist = labels["does-not-exist"] ?? "fallback";
518+
519+
$MSG.exists = labels["foo"] ?? "fallback";
520+
""",
521+
)
522+
syslog_ng.start(config)
523+
524+
assert file_final.get_stats()["processed"] == 1
525+
assert file_final.read_log() == r"""{"empty_labels_does_not_exist":"fallback","does_not_exist":"fallback","exists":"bar"}"""

0 commit comments

Comments
 (0)