Fixed up bug with encode_application_double function.
Added new bacapp_decode_application_data_safe function and other *_safe functions that aim to prevent buffer overruns if encoded application message is malformed. Note: bacstr unit tests currently have one failure.
This commit is contained in:
@@ -129,6 +129,11 @@ extern "C" {
|
||||
unsigned max_apdu_len,
|
||||
BACNET_APPLICATION_DATA_VALUE * value);
|
||||
|
||||
bool bacapp_decode_application_data_safe(
|
||||
uint8_t * new_apdu,
|
||||
uint32_t new_apdu_len,
|
||||
BACNET_APPLICATION_DATA_VALUE * value);
|
||||
|
||||
int bacapp_encode_application_data(
|
||||
uint8_t * apdu,
|
||||
BACNET_APPLICATION_DATA_VALUE * value);
|
||||
|
||||
@@ -70,6 +70,11 @@ extern "C" {
|
||||
uint8_t * apdu,
|
||||
uint8_t * tag_number,
|
||||
uint32_t * value);
|
||||
int decode_tag_number_and_value_safe(
|
||||
uint8_t * apdu,
|
||||
uint8_t apdu_len_remaining,
|
||||
uint8_t * tag_number,
|
||||
uint32_t * value);
|
||||
/* returns true if the tag is context specific */
|
||||
bool decode_is_context_specific(
|
||||
uint8_t * apdu);
|
||||
@@ -171,6 +176,12 @@ extern "C" {
|
||||
uint16_t * object_type,
|
||||
uint32_t * instance);
|
||||
|
||||
int decode_object_id_safe(
|
||||
uint8_t * apdu,
|
||||
uint32_t len_value,
|
||||
uint16_t * object_type,
|
||||
uint32_t * instance);
|
||||
|
||||
int decode_context_object_id(
|
||||
uint8_t * apdu,
|
||||
uint8_t tag_number,
|
||||
@@ -316,7 +327,11 @@ extern "C" {
|
||||
int decode_bacnet_time(
|
||||
uint8_t * apdu,
|
||||
BACNET_TIME * btime);
|
||||
int encode_context_time(
|
||||
int decode_bacnet_time_safe(
|
||||
uint8_t * apdu,
|
||||
uint32_t len_value,
|
||||
BACNET_TIME * btime);
|
||||
int encode_context_time(
|
||||
uint8_t * apdu,
|
||||
uint8_t tag_number,
|
||||
BACNET_TIME * btime);
|
||||
@@ -351,7 +366,11 @@ extern "C" {
|
||||
int decode_date(
|
||||
uint8_t * apdu,
|
||||
BACNET_DATE * bdate);
|
||||
int decode_application_date(
|
||||
int decode_date_safe(
|
||||
uint8_t * apdu,
|
||||
uint32_t len_value,
|
||||
BACNET_DATE * bdate);
|
||||
int decode_application_date(
|
||||
uint8_t * apdu,
|
||||
BACNET_DATE * bdate);
|
||||
int decode_context_date(
|
||||
|
||||
@@ -42,6 +42,11 @@
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
int decode_real_safe(
|
||||
uint8_t * apdu,
|
||||
uint32_t len_value,
|
||||
float *real_value);
|
||||
|
||||
int decode_real(
|
||||
uint8_t * apdu,
|
||||
float *real_value);
|
||||
@@ -56,7 +61,12 @@ extern "C" {
|
||||
int decode_double(
|
||||
uint8_t * apdu,
|
||||
double *real_value);
|
||||
int encode_bacnet_double(
|
||||
int decode_double_safe(
|
||||
uint8_t * apdu,
|
||||
uint32_t len_value,
|
||||
double *double_value);
|
||||
|
||||
int encode_bacnet_double(
|
||||
double value,
|
||||
uint8_t * apdu);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user