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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user