Skip to content

[processors.parser] Segmentation fault in nested parsing #9282

@mirkocomparetti-synesis

Description

Relevant telegraf.conf:

[[outputs.influxdb_v2]]
...
[[processors.printer]]
  order = 1
[[processors.strings]]
  order = 2
  [[processors.strings.base64decode]]
    field = "Messages_Payload_Buffer"
[[processors.printer]]
  order = 3
[[processors.parser]]
  order = 4
  parse_fields = ["Messages_Payload_Buffer"]
  drop_original = false
  merge = "override"
  data_format = "xml"
  [[processors.parser.xml]]
    metric_selection = "/Bus/child::Sensor"
    metric_name = "string('sensors')"
    timestamp = "/Gateway/Timestamp"
    timestamp_format = "2006-01-02T15:04:05Z"
    [processors.parser.xml.tags]
      name = "substring-after(@name, ' ')"
    [processors.parser.xml.fields_int]
      consumers = "Variable/@consumers"
    [processors.parser.xml.fields]
      temperature = "number(Variable/@temperature)"
      power       = "number(Variable/@power)"
      frequency   = "number(Variable/@frequency)"
      ok          = "Mode != 'error'"
[[processors.printer]]
  order = 5
[[inputs.file]]
  files = ["./input.json"]
  data_format = "json"
  json_string_fields = [
    "Messages_*Payload_Buffer",
  ]

System info:

Telegraf 1.18.2 (git: HEAD a614372)
Ubuntu 20.04 server

Steps to reproduce:

  1. Run telegraf against the file
{
    "Messages": {
        "Payload": {
            "Buffer": "PD94bWwgdmVyc2lvbj0iMS4wIj8+CjxHYXRld2F5PgogIDxOYW1lPk1haW4gR2F0ZXdheTwvTmFtZT4KICA8VGltZXN0YW1wPjIwMjAtMDgtMDFUMTU6MDQ6MDNaPC9UaW1lc3RhbXA+CiAgPFNlcXVlbmNlPjEyPC9TZXF1ZW5jZT4KICA8U3RhdHVzPm9rPC9TdGF0dXM+CjwvR2F0ZXdheT4KCjxCdXM+CiAgPFNlbnNvciBuYW1lPSJTZW5zb3IgRmFjaWxpdHkgQSI+CiAgICA8VmFyaWFibGUgdGVtcGVyYXR1cmU9IjIwLjAiLz4KICAgIDxWYXJpYWJsZSBwb3dlcj0iMTIzLjQiLz4KICAgIDxWYXJpYWJsZSBmcmVxdWVuY3k9IjQ5Ljc4Ii8+CiAgICA8VmFyaWFibGUgY29uc3VtZXJzPSIzIi8+CiAgICA8TW9kZT5idXN5PC9Nb2RlPgogIDwvU2Vuc29yPgogIDxTZW5zb3IgbmFtZT0iU2Vuc29yIEZhY2lsaXR5IEIiPgogICAgPFZhcmlhYmxlIHRlbXBlcmF0dXJlPSIyMy4xIi8+CiAgICA8VmFyaWFibGUgcG93ZXI9IjE0LjMiLz4KICAgIDxWYXJpYWJsZSBmcmVxdWVuY3k9IjQ5Ljc4Ii8+CiAgICA8VmFyaWFibGUgY29uc3VtZXJzPSIxIi8+CiAgICA8TW9kZT5zdGFuZGJ5PC9Nb2RlPgogIDwvU2Vuc29yPgogIDxTZW5zb3IgbmFtZT0iU2Vuc29yIEZhY2lsaXR5IEMiPgogICAgPFZhcmlhYmxlIHRlbXBlcmF0dXJlPSIxOS43Ii8+CiAgICA8VmFyaWFibGUgcG93ZXI9IjAuMDIiLz4KICAgIDxWYXJpYWJsZSBmcmVxdWVuY3k9IjQ5Ljc4Ii8+CiAgICA8VmFyaWFibGUgY29uc3VtZXJzPSIwIi8+CiAgICA8TW9kZT5lcnJvcjwvTW9kZT4KICA8L1NlbnNvcj4KPC9CdXM+"
        }
    }
}

Expected behavior:

The parser should parse the file as specified in the documentation.

Actual behavior:

There is a segmentation fault

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x91d05d]
goroutine 21 [running]:
github.com/influxdata/telegraf/plugins/parsers/xml.(*Parser).Parse(0xc0002c1d40, 0xc0005a0800, 0x760, 0x800, 0x760, 0x800, 0x0, 0x1, 0x0)
        /go/src/github.com/influxdata/telegraf/plugins/parsers/xml/parser.go:61 +0x4fd
github.com/influxdata/telegraf/plugins/processors/parser.(*Parser).parseField(...)
        /go/src/github.com/influxdata/telegraf/plugins/processors/parser/parser.go:117
github.com/influxdata/telegraf/plugins/processors/parser.(*Parser).Apply(0xc0003bc000, 0xc0005a6e90, 0x1, 0x1, 0xc000488360, 0x18, 0xc0000b8658)
        /go/src/github.com/influxdata/telegraf/plugins/processors/parser/parser.go:68 +0x4e6
github.com/influxdata/telegraf/plugins/processors.(*streamingProcessor).Add(0xc0002c1590, 0x42e9e58, 0xc000163500, 0x42de2b8, 0xc0000b20a0, 0x1, 0xc0000b0101)
        /go/src/github.com/influxdata/telegraf/plugins/processors/streamingprocessor.go:37 +0x82
github.com/influxdata/telegraf/models.(*RunningProcessor).Add(0xc0002c17d0, 0x42e9e58, 0xc000163500, 0x42de2b8, 0xc0000b20a0, 0x0, 0x0)
        /go/src/github.com/influxdata/telegraf/models/running_processor.go:95 +0x108
github.com/influxdata/telegraf/agent.(*Agent).runProcessors.func1(0xc0005e4000, 0xc0000c3a58)
        /go/src/github.com/influxdata/telegraf/agent/agent.go:566 +0x157
created by github.com/influxdata/telegraf/agent.(*Agent).runProcessors
        /go/src/github.com/influxdata/telegraf/agent/agent.go:561 +0x91

Additional info:

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/influxdbbugunexpected problem or unintended behavior

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions