Skip to content

Commit

Permalink
Fix panic when parsing invalid lines
Browse files Browse the repository at this point in the history
The line

```
|h|#consumer:Kafka::SharedConfigurationConsumer,topic:shared_configuration_update,partition:1,consumer_group:tc_rc_us
```

caused a panic because the line parsing _first_ splits by `:` and then failed to
find a `|` to split on.

Check that we get at least two "line parts" (i.e. splits around `|`) when we
expect them, and if not, gracefully reject the line instead of crashing.

Fixes #572.

Signed-off-by: Matthias Rampke <matthias@prometheus.io>
  • Loading branch information
matthiasr committed Sep 15, 2024
1 parent eccf511 commit d6a7196
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 0 deletions.
5 changes: 5 additions & 0 deletions pkg/line/line.go
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,11 @@ func (p *Parser) LineToEvents(line string, sampleErrors prometheus.CounterVec, s

var samples []string
lineParts := strings.SplitN(elements[1], "|", 3)
if len(lineParts) < 2 {
sampleErrors.WithLabelValues("not_enough_parts_after_colon").Inc()
level.Debug(logger).Log("msg", "Bad line (not enough parts after first :) from StatsD", "line", line)
return events
}
if strings.Contains(lineParts[0], ":") {
// handle DogStatsD extended aggregation
isValidAggType := false
Expand Down
6 changes: 6 additions & 0 deletions pkg/line/line_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -823,6 +823,12 @@ func TestLineToEvents(t *testing.T) {
},
},
},
"invalid event split over lines part 1": {
in: "karafka.consumer.consume.cpu_idle_second: 0.111090 -0.055903 -0.195390 ( 2.419002)",
},
"invalid event split over lines part 2": {
in: "|h|#consumer:Kafka::SharedConfigurationConsumer,topic:shared_configuration_update,partition:1,consumer_group:tc_rc_us",
},
}

parser := NewParser()
Expand Down

0 comments on commit d6a7196

Please sign in to comment.