You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2024/09/13 10:17:30 UTC
(plc4x) 03/03: feat(bacnetip): avoid panic on garbage data
This is an automated email from the ASF dual-hosted git repository.
sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit 46fa163f9defb989f39bd7602d9c6e586dd10bb7
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Fri Sep 13 12:17:20 2024 +0200
feat(bacnetip): avoid panic on garbage data
---
plc4go/protocols/bacnetip/readwrite/model/NPDU.go | 5 +++++
.../bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec | 1 +
2 files changed, 6 insertions(+)
diff --git a/plc4go/protocols/bacnetip/readwrite/model/NPDU.go b/plc4go/protocols/bacnetip/readwrite/model/NPDU.go
index a47d89252d..a6003ceec3 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/NPDU.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/NPDU.go
@@ -342,6 +342,11 @@ func (m *_NPDU) parse(ctx context.Context, readBuffer utils.ReadBuffer, npduLeng
}
m.Control = control
+ // Validation
+ if !(bool((control) != (nil))) {
+ return nil, errors.WithStack(utils.ParseValidationError{Message: "control required for further processing"})
+ }
+
var destinationNetworkAddress *uint16
destinationNetworkAddress, err = ReadOptionalField[uint16](ctx, "destinationNetworkAddress", ReadUnsignedShort(readBuffer, uint8(16)), control.GetDestinationSpecified())
if err != nil {
diff --git a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
index 8cee11b75a..848b6ec0cf 100644
--- a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
+++ b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
@@ -98,6 +98,7 @@
[type NPDU(uint 16 npduLength)
[simple uint 8 protocolVersionNumber ]
[simple NPDUControl control ]
+ [validation 'control != null' "control required for further processing" ]
[optional uint 16 destinationNetworkAddress 'control.destinationSpecified' ]
[optional uint 8 destinationLength 'control.destinationSpecified' ]
[array uint 8 destinationAddress count 'control.destinationSpecified ? destinationLength : 0' ]