Bugfix/service request refactor size check (#553)

* refactor service requests from service header

* add APDU size checking and length feature

* add unit tests to check for length when passing NULL buffer

---------

Co-authored-by: Steve Karg <skarg@users.sourceforge.net>
This commit is contained in:
Steve Karg
2024-01-05 08:59:45 -06:00
committed by GitHub
parent 5ca14e5320
commit bb081d28da
39 changed files with 2614 additions and 1514 deletions
+23 -3
View File
@@ -18,7 +18,7 @@
#include "bacnet/list_element.h"
/**
* @brief Encode the Add/Remove ListElement service request only
* @brief Encode the Add/Remove ListElement service request APDU
*
* AddListElement-Request ::= SEQUENCE {
* object-identifier [0] BACnetObjectIdentifier,
@@ -85,6 +85,28 @@ int list_element_encode_service_request(
return apdu_len;
}
/**
* @brief Encode the Add/Remove ListElement service request only
* @param apdu Pointer to the buffer for encoding into
* @param apdu_size number of bytes available in the buffer
* @param data Pointer to the service data used for encoding values
* @return number of bytes encoded, or zero if unable to encode or too large
*/
size_t list_element_service_request_encode(
uint8_t *apdu, size_t apdu_size, BACNET_LIST_ELEMENT_DATA *data)
{
size_t apdu_len = 0; /* total length of the apdu, return value */
apdu_len = list_element_encode_service_request(NULL, data);
if (apdu_len > apdu_size) {
apdu_len = 0;
} else {
apdu_len = list_element_encode_service_request(apdu, data);
}
return apdu_len;
}
/**
* @brief Decode the Add/Remove ListElement service request only
* @param apdu Pointer to the buffer for decoding.
@@ -273,7 +295,6 @@ int list_element_error_ack_encode(
return apdu_len;
}
#if !BACNET_SVC_SERVER
/**
* @brief Decoding for AddListElement or RemoveListElement Error Ack
* AddListElement-Error ::= SEQUENCE {
@@ -362,4 +383,3 @@ int list_element_error_ack_decode(
return apdu_len;
}
#endif