diff --git a/src/bacnet/basic/service/h_cov.c b/src/bacnet/basic/service/h_cov.c index e6d30679..82003448 100644 --- a/src/bacnet/basic/service/h_cov.c +++ b/src/bacnet/basic/service/h_cov.c @@ -381,22 +381,30 @@ static bool cov_list_subscribe(BACNET_ADDRESS *src, } } if (!existing_entry && (first_invalid_index >= 0) && - (!cov_data->cancellationRequest)) { - index = first_invalid_index; - found = true; - COV_Subscriptions[index].flag.valid = true; - COV_Subscriptions[index].dest_index = cov_address_add(src); - COV_Subscriptions[index].monitoredObjectIdentifier.type = - cov_data->monitoredObjectIdentifier.type; - COV_Subscriptions[index].monitoredObjectIdentifier.instance = - cov_data->monitoredObjectIdentifier.instance; - COV_Subscriptions[index].subscriberProcessIdentifier = - cov_data->subscriberProcessIdentifier; - COV_Subscriptions[index].flag.issueConfirmedNotifications = - cov_data->issueConfirmedNotifications; - COV_Subscriptions[index].invokeID = 0; - COV_Subscriptions[index].lifetime = cov_data->lifetime; - COV_Subscriptions[index].flag.send_requested = true; + (!cov_data->cancellationRequest)) { + const int addr_add_ret = cov_address_add(src); + + if(addr_add_ret < 0) { + *error_class = ERROR_CLASS_RESOURCES; + *error_code = ERROR_CODE_NO_SPACE_TO_ADD_LIST_ELEMENT; + found = false; + } else { + COV_Subscriptions[index].dest_index = addr_add_ret; + index = first_invalid_index; + found = true; + COV_Subscriptions[index].flag.valid = true; + COV_Subscriptions[index].monitoredObjectIdentifier.type = + cov_data->monitoredObjectIdentifier.type; + COV_Subscriptions[index].monitoredObjectIdentifier.instance = + cov_data->monitoredObjectIdentifier.instance; + COV_Subscriptions[index].subscriberProcessIdentifier = + cov_data->subscriberProcessIdentifier; + COV_Subscriptions[index].flag.issueConfirmedNotifications = + cov_data->issueConfirmedNotifications; + COV_Subscriptions[index].invokeID = 0; + COV_Subscriptions[index].lifetime = cov_data->lifetime; + COV_Subscriptions[index].flag.send_requested = true; + } } else if (!existing_entry) { if (first_invalid_index < 0) { /* Out of resources */