diff --git a/bacnet-stack/src/bacapp.c b/bacnet-stack/src/bacapp.c index dcc48bb1..7ed8503d 100644 --- a/bacnet-stack/src/bacapp.c +++ b/bacnet-stack/src/bacapp.c @@ -264,8 +264,10 @@ int bacapp_decode_data( } } - if (len == 0 && tag_data_type != BACNET_APPLICATION_TAG_NULL && - tag_data_type != BACNET_APPLICATION_TAG_BOOLEAN) { + if ((len == 0) && + (tag_data_type != BACNET_APPLICATION_TAG_NULL) && + (tag_data_type != BACNET_APPLICATION_TAG_BOOLEAN) && + (tag_data_type != BACNET_APPLICATION_TAG_OCTET_STRING)) { /* indicate that we were not able to decode the value */ value->tag = MAX_BACNET_APPLICATION_TAG; } diff --git a/bacnet-stack/src/bacstr.c b/bacnet-stack/src/bacstr.c index 3d2f7775..a27176d3 100644 --- a/bacnet-stack/src/bacstr.c +++ b/bacnet-stack/src/bacstr.c @@ -635,8 +635,12 @@ bool octetstring_init( if (length <= MAX_OCTET_STRING_BYTES) { if (value) { for (i = 0; i < length; i++) { - octet_string->value[octet_string->length] = value[i]; - octet_string->length++; + if (i < length) { + octet_string->value[octet_string->length] = value[i]; + octet_string->length++; + } else { + octet_string->value[i] = 0; + } } } else { for (i = 0; i < MAX_OCTET_STRING_BYTES; i++) { diff --git a/bacnet-stack/src/ptransfer.c b/bacnet-stack/src/ptransfer.c index 99e36861..12e22d6f 100644 --- a/bacnet-stack/src/ptransfer.c +++ b/bacnet-stack/src/ptransfer.c @@ -485,12 +485,14 @@ void test_Private_Transfer_Ack( char private_data_chunk[32] = { "I Love You, Patricia!" }; BACNET_APPLICATION_DATA_VALUE data_value; BACNET_APPLICATION_DATA_VALUE test_data_value; + bool status = false; private_data.vendorID = BACNET_VENDOR_ID; private_data.serviceNumber = 1; - bacapp_parse_application_data(BACNET_APPLICATION_TAG_OCTET_STRING, + status = bacapp_parse_application_data(BACNET_APPLICATION_TAG_OCTET_STRING, &private_data_chunk[0], &data_value); + ct_test(pTest, status == true); private_data_len = bacapp_encode_application_data(&test_value[0], &data_value); @@ -536,12 +538,14 @@ void test_Private_Transfer_Error( char private_data_chunk[32] = { "I Love You, Patricia!" }; BACNET_APPLICATION_DATA_VALUE data_value; BACNET_APPLICATION_DATA_VALUE test_data_value; + bool status = false; private_data.vendorID = BACNET_VENDOR_ID; private_data.serviceNumber = 1; - bacapp_parse_application_data(BACNET_APPLICATION_TAG_OCTET_STRING, + status = bacapp_parse_application_data(BACNET_APPLICATION_TAG_OCTET_STRING, &private_data_chunk[0], &data_value); + ct_test(pTest, status == true); private_data_len = bacapp_encode_application_data(&test_value[0], &data_value); private_data.serviceParameters = &test_value[0]; @@ -581,16 +585,18 @@ void test_Private_Transfer_Request( uint8_t test_invoke_id = 0; int private_data_len = 0; char private_data_chunk[32] = { "I Love You, Patricia!" }; - BACNET_APPLICATION_DATA_VALUE data_value; - BACNET_APPLICATION_DATA_VALUE test_data_value; - BACNET_PRIVATE_TRANSFER_DATA private_data; - BACNET_PRIVATE_TRANSFER_DATA test_data; + BACNET_APPLICATION_DATA_VALUE data_value = {0}; + BACNET_APPLICATION_DATA_VALUE test_data_value = {0}; + BACNET_PRIVATE_TRANSFER_DATA private_data = {0}; + BACNET_PRIVATE_TRANSFER_DATA test_data = {0}; + bool status = false; private_data.vendorID = BACNET_VENDOR_ID; private_data.serviceNumber = 1; - bacapp_parse_application_data(BACNET_APPLICATION_TAG_OCTET_STRING, + status = bacapp_parse_application_data(BACNET_APPLICATION_TAG_OCTET_STRING, &private_data_chunk[0], &data_value); + ct_test(pTest, status == true); private_data_len = bacapp_encode_application_data(&test_value[0], &data_value); private_data.serviceParameters = &test_value[0]; @@ -621,19 +627,20 @@ void test_Unconfirmed_Private_Transfer_Request( uint8_t test_value[480] = { 0 }; int len = 0; int apdu_len = 0; - uint8_t test_invoke_id = 0; int private_data_len = 0; char private_data_chunk[32] = { "I Love You, Patricia!" }; BACNET_APPLICATION_DATA_VALUE data_value; BACNET_APPLICATION_DATA_VALUE test_data_value; BACNET_PRIVATE_TRANSFER_DATA private_data; BACNET_PRIVATE_TRANSFER_DATA test_data; + bool status = false; private_data.vendorID = BACNET_VENDOR_ID; private_data.serviceNumber = 1; - bacapp_parse_application_data(BACNET_APPLICATION_TAG_OCTET_STRING, + status = bacapp_parse_application_data(BACNET_APPLICATION_TAG_OCTET_STRING, &private_data_chunk[0], &data_value); + ct_test(pTest, status == true); private_data_len = bacapp_encode_application_data(&test_value[0], &data_value); private_data.serviceParameters = &test_value[0];