diff --git a/ports/arduino_uno/apdu.c b/ports/arduino_uno/apdu.c index d7b9b978..97feded1 100644 --- a/ports/arduino_uno/apdu.c +++ b/ports/arduino_uno/apdu.c @@ -108,6 +108,10 @@ void apdu_handler(BACNET_ADDRESS *src, &apdu[0], /* APDU data */ apdu_len, &service_data, &service_choice, &service_request, &service_request_len); + if (len == 0) { + /* service data unable to be decoded - simply drop */ + break; + } if (service_choice == SERVICE_CONFIRMED_READ_PROPERTY) { handler_read_property(service_request, service_request_len, src, &service_data); diff --git a/ports/atmega168/apdu.c b/ports/atmega168/apdu.c index 41f1e93d..a6ee5a28 100644 --- a/ports/atmega168/apdu.c +++ b/ports/atmega168/apdu.c @@ -106,6 +106,10 @@ void apdu_handler(BACNET_ADDRESS *src, &apdu[0], /* APDU data */ apdu_len, &service_data, &service_choice, &service_request, &service_request_len); + if (len == 0) { + /* service data unable to be decoded - simply drop */ + break; + } if (service_choice == SERVICE_CONFIRMED_READ_PROPERTY) { handler_read_property(service_request, service_request_len, src, &service_data); diff --git a/ports/pic18f6720/apdu.c b/ports/pic18f6720/apdu.c index 3a776d0d..fa82aa6c 100644 --- a/ports/pic18f6720/apdu.c +++ b/ports/pic18f6720/apdu.c @@ -171,6 +171,10 @@ void apdu_handler(BACNET_ADDRESS *src, &apdu[0], /* APDU data */ apdu_len, &service_data, &service_choice, &service_request, &service_request_len); + if (len == 0) { + /* service data unable to be decoded - simply drop */ + break; + } if (apdu_confirmed_dcc_disabled(service_choice)) { /* When network communications are completely disabled, only DeviceCommunicationControl and ReinitializeDevice diff --git a/ports/pic18f97j60/apdu.c b/ports/pic18f97j60/apdu.c index 3a776d0d..fa82aa6c 100644 --- a/ports/pic18f97j60/apdu.c +++ b/ports/pic18f97j60/apdu.c @@ -171,6 +171,10 @@ void apdu_handler(BACNET_ADDRESS *src, &apdu[0], /* APDU data */ apdu_len, &service_data, &service_choice, &service_request, &service_request_len); + if (len == 0) { + /* service data unable to be decoded - simply drop */ + break; + } if (apdu_confirmed_dcc_disabled(service_choice)) { /* When network communications are completely disabled, only DeviceCommunicationControl and ReinitializeDevice diff --git a/src/bacnet/basic/service/h_apdu.c b/src/bacnet/basic/service/h_apdu.c index 0d6c6186..0c03eecb 100644 --- a/src/bacnet/basic/service/h_apdu.c +++ b/src/bacnet/basic/service/h_apdu.c @@ -510,9 +510,13 @@ void apdu_handler(BACNET_ADDRESS *src, /* PDU Type */ switch (apdu[0] & 0xF0) { case PDU_TYPE_CONFIRMED_SERVICE_REQUEST: - (void)apdu_decode_confirmed_service_request(&apdu[0], apdu_len, - &service_data, &service_choice, &service_request, - &service_request_len); + len = apdu_decode_confirmed_service_request( + &apdu[0], apdu_len, &service_data, &service_choice, + &service_request, &service_request_len); + if (len == 0) { + /* service data unable to be decoded - simply drop */ + break; + } if (apdu_confirmed_dcc_disabled(service_choice)) { /* When network communications are completely disabled, only DeviceCommunicationControl and ReinitializeDevice