Skip to content

Commit f224f57

Browse files
committed
Switch to strnlen for string length safety
1 parent e4be95e commit f224f57

File tree

1 file changed

+5
-11
lines changed

1 file changed

+5
-11
lines changed

src/DMXSerial2.cpp

+5-11
Original file line numberDiff line numberDiff line change
@@ -681,8 +681,7 @@ void DMXSerialClass2::_processRDMMessage(byte CmdClass, uint16_t Parameter, bool
681681
nackReason = E120_NR_SUB_DEVICE_OUT_OF_RANGE;
682682
} else {
683683
// return the manufacturer label
684-
_rdm.packet.DataLength = strlen(_initData->manufacturerLabel);
685-
_rdm.packet.DataLength = min(_rdm.packet.DataLength, DMXSERIAL_MAX_RDM_STRING_LENGTH);
684+
_rdm.packet.DataLength = strnlen(_initData->manufacturerLabel, DMXSERIAL_MAX_RDM_STRING_LENGTH);
686685
memcpy(_rdm.packet.Data, _initData->manufacturerLabel, _rdm.packet.DataLength);
687686
handled = true;
688687
}
@@ -701,8 +700,7 @@ void DMXSerialClass2::_processRDMMessage(byte CmdClass, uint16_t Parameter, bool
701700
nackReason = E120_NR_SUB_DEVICE_OUT_OF_RANGE;
702701
} else {
703702
// return the DEVICE MODEL DESCRIPTION
704-
_rdm.packet.DataLength = strlen(_initData->deviceModel);
705-
_rdm.packet.DataLength = min(_rdm.packet.DataLength, DMXSERIAL_MAX_RDM_STRING_LENGTH);
703+
_rdm.packet.DataLength = strnlen(_initData->deviceModel, DMXSERIAL_MAX_RDM_STRING_LENGTH);
706704
memcpy(_rdm.packet.Data, _initData->deviceModel, _rdm.packet.DataLength);
707705
handled = true;
708706
}
@@ -732,8 +730,7 @@ void DMXSerialClass2::_processRDMMessage(byte CmdClass, uint16_t Parameter, bool
732730
// No sub-devices supported
733731
nackReason = E120_NR_SUB_DEVICE_OUT_OF_RANGE;
734732
} else {
735-
_rdm.packet.DataLength = strlen(deviceLabel);
736-
_rdm.packet.DataLength = min(_rdm.packet.DataLength, DMXSERIAL_MAX_RDM_STRING_LENGTH);
733+
_rdm.packet.DataLength = strnlen(deviceLabel, DMXSERIAL_MAX_RDM_STRING_LENGTH);
737734
memcpy(_rdm.packet.Data, deviceLabel, _rdm.packet.DataLength);
738735
handled = true;
739736
}
@@ -749,8 +746,7 @@ void DMXSerialClass2::_processRDMMessage(byte CmdClass, uint16_t Parameter, bool
749746
nackReason = E120_NR_SUB_DEVICE_OUT_OF_RANGE;
750747
} else {
751748
// return the SOFTWARE_VERSION_LABEL
752-
_rdm.packet.DataLength = strlen(_softwareLabel);
753-
_rdm.packet.DataLength = min(_rdm.packet.DataLength, DMXSERIAL_MAX_RDM_STRING_LENGTH);
749+
_rdm.packet.DataLength = strnlen(_softwareLabel, DMXSERIAL_MAX_RDM_STRING_LENGTH);
754750
memcpy(_rdm.packet.Data, _softwareLabel, _rdm.packet.DataLength);
755751
handled = true;
756752
}
@@ -847,9 +843,7 @@ void DMXSerialClass2::_processRDMMessage(byte CmdClass, uint16_t Parameter, bool
847843
// Out of range sensor
848844
nackReason = E120_NR_DATA_OUT_OF_RANGE;
849845
} else {
850-
_rdm.packet.DataLength = strlen(_initData->sensors[sensorNr].description);
851-
_rdm.packet.DataLength = min(_rdm.packet.DataLength, DMXSERIAL_MAX_RDM_STRING_LENGTH);
852-
_rdm.packet.DataLength = 13 + _rdm.packet.DataLength;
846+
_rdm.packet.DataLength = 13 + strnlen(_initData->sensors[sensorNr].description, DMXSERIAL_MAX_RDM_STRING_LENGTH);
853847
_rdm.packet.Data[0] = sensorNr;
854848
_rdm.packet.Data[1] = _initData->sensors[sensorNr].type;
855849
_rdm.packet.Data[2] = _initData->sensors[sensorNr].unit;

0 commit comments

Comments
 (0)