From 5e0ac24c70bb4828fc0e790b186c5ef3d67721bf Mon Sep 17 00:00:00 2001 From: andig Date: Thu, 21 Jul 2022 18:07:34 +0200 Subject: [PATCH] Modbus: guard against panic (#3907) --- provider/modbus.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/provider/modbus.go b/provider/modbus.go index 5127dfca4..34de1cc9e 100644 --- a/provider/modbus.go +++ b/provider/modbus.go @@ -152,9 +152,14 @@ func (m *Modbus) bytesGetter() ([]byte, error) { return nil, errors.New("expected rtu reading") } -func (m *Modbus) floatGetter() (float64, error) { +func (m *Modbus) floatGetter() (f float64, err error) { + defer func() { + if r := recover(); r != nil { + err = fmt.Errorf("panic: %v", r) + } + }() + var res meters.MeasurementResult - var err error // if funccode is configured, execute the read directly if op := m.op.MBMD; op.FuncCode != 0 { @@ -201,7 +206,7 @@ func (m *Modbus) floatGetter() (float64, error) { } // FloatGetter executes configured modbus read operation and implements func() (float64, error) -func (m *Modbus) FloatGetter() func() (float64, error) { +func (m *Modbus) FloatGetter() func() (f float64, err error) { return m.floatGetter }